@@ -562,13 +562,28 @@ int LWIP_SOCKETS_Driver::SetSockOpt( SOCK_SOCKET socket, int level, int optname,
562562 nativeOptionName = GetNativeSockOption (optname);
563563
564564 switch (optname)
565- {
565+ {
566+ // LINGER is not implemented in LWIP
567+ case SOCK_SOCKO_LINGER:
568+ if (*(int *)optval)
569+ {
570+ errno = SOCK_ENOPROTOOPT;
571+ return SOCK_SOCKET_ERROR;
572+ }
573+ return 0 ;
574+ case SOCK_SOCKO_DONTLINGER:
575+ if (!*(int *)optval)
576+ {
577+ errno = SOCK_ENOPROTOOPT;
578+ return SOCK_SOCKET_ERROR;
579+ }
580+ return 0 ;
581+
566582 // ignore this item to enable http to work
567583 case SOCK_SOCKO_REUSEADDRESS:
568584 return 0 ;
569585
570586 case SOCK_SOCKO_EXCLUSIVEADDRESSUSE:
571- case SOCK_SOCKO_DONTLINGER:
572587 nativeIntValue = !*(int *)optval;
573588 pNativeOptionValue = (char *)&nativeIntValue;
574589 break ;
@@ -610,6 +625,18 @@ int LWIP_SOCKETS_Driver::GetSockOpt( SOCK_SOCKET socket, int level, int optname,
610625 case SOCK_SOL_SOCKET:
611626 nativeLevel = SOL_SOCKET;
612627 nativeOptionName = GetNativeSockOption (optname);
628+ switch (optname)
629+ {
630+ // LINGER is not implemented in LWIP
631+ case SOCK_SOCKO_LINGER:
632+ *optval = 0 ;
633+ return 0 ;
634+ case SOCK_SOCKO_DONTLINGER:
635+ *optval = 1 ;
636+ return 0 ;
637+ default :
638+ break ;
639+ }
613640 break ;
614641 default :
615642 nativeLevel = level;
@@ -625,9 +652,8 @@ int LWIP_SOCKETS_Driver::GetSockOpt( SOCK_SOCKET socket, int level, int optname,
625652 {
626653 case SOCK_SOL_SOCKET:
627654 switch (optname)
628- {
655+ {
629656 case SOCK_SOCKO_EXCLUSIVEADDRESSUSE:
630- case SOCK_SOCKO_DONTLINGER:
631657 *optval = !(*(int *)optval != 0 );
632658 break ;
633659
0 commit comments