@@ -509,7 +509,55 @@ static void telnet_thread(void* parameter)
509509 {
510510 continue ;
511511 }
512-
512+
513+ #if (defined(LWIP_SO_SNDTIMEO ) && LWIP_SO_SNDTIMEO ) || defined(RT_USING_DFS_NET ) || defined(SAL_USING_POSIX )
514+ /* set send timeout */
515+ struct timeval snd_to = {0 };
516+ snd_to .tv_sec = 0 ;
517+ snd_to .tv_usec = 5000 * 1000 ;
518+ if (setsockopt (telnet -> client_fd , SOL_SOCKET , SO_SNDTIMEO , (void * )& snd_to , sizeof (snd_to )) < 0 )
519+ {
520+ closesocket (telnet -> client_fd );
521+ rt_kprintf ("telnet:set socket send timeout failed\n" );
522+ continue ;
523+ }
524+ #endif /* (defined(LWIP_SO_SNDTIMEO) && LWIP_SO_SNDTIMEO) || defined(RT_USING_DFS_NET) || defined(SAL_USING_POSIX) */
525+
526+ /* set keepalive */
527+ rt_int32_t keepalive_en = 1 ;
528+ if (setsockopt (telnet -> client_fd , SOL_SOCKET , SO_KEEPALIVE , (void * )& keepalive_en , sizeof (keepalive_en )) < 0 )
529+ {
530+ closesocket (telnet -> client_fd );
531+ rt_kprintf ("telnet:set socket keepalive failed\n" );
532+ continue ;
533+ }
534+
535+ #if (defined(LWIP_TCP_KEEPALIVE ) && LWIP_TCP_KEEPALIVE ) || defined(RT_USING_DFS_NET ) || defined(SAL_USING_POSIX )
536+ int keepidle = 5 ;
537+ if (setsockopt (telnet -> client_fd , IPPROTO_TCP , TCP_KEEPIDLE , (void * )& keepidle , sizeof (keepidle )) < 0 )
538+ {
539+ closesocket (telnet -> client_fd );
540+ rt_kprintf ("telnet:set socket keepidle failed\n" );
541+ continue ;
542+ }
543+
544+ int keepintvl = 1 ;
545+ if (setsockopt (telnet -> client_fd , IPPROTO_TCP , TCP_KEEPINTVL , (void * )& keepintvl , sizeof (keepintvl )) < 0 )
546+ {
547+ closesocket (telnet -> client_fd );
548+ rt_kprintf ("telnet:set socket keepintvl failed\n" );
549+ continue ;
550+ }
551+
552+ int keepcnt = 3 ;
553+ if (setsockopt (telnet -> client_fd , IPPROTO_TCP , TCP_KEEPCNT , (void * )& keepcnt , sizeof (keepcnt )) < 0 )
554+ {
555+ closesocket (telnet -> client_fd );
556+ rt_kprintf ("telnet:set socket keepcnt failed\n" );
557+ continue ;
558+ }
559+ #endif /* (defined(LWIP_TCP_KEEPALIVE) && LWIP_TCP_KEEPALIVE) || defined(RT_USING_DFS_NET) || defined(SAL_USING_POSIX) */
560+
513561 rt_kprintf ("telnet: new telnet client(%s:%d) connection, switch console to telnet...\n" , inet_ntoa (addr .sin_addr ), addr .sin_port );
514562
515563 /* process the new connection */
0 commit comments