diff --git a/src/socket/ntapi_sc_getsockopt.c b/src/socket/ntapi_sc_getsockopt.c index fa2233f..e70ba28 100644 --- a/src/socket/ntapi_sc_getsockopt.c +++ b/src/socket/ntapi_sc_getsockopt.c @@ -24,14 +24,23 @@ int32_t __cdecl __ntapi_sc_getsockopt( if (!iosb) return NT_STATUS_INVALID_PARAMETER_6; + /* tcp socket info? */ + if (optname == NT_SO_IOCTL_GET_TCP_INFO) { + afd_sockopt.mode = NT_AFD_SOCKOPT_GET | NT_AFD_SOCKOPT_SET; + afd_sockopt.optval = &(uint32_t){0}; + afd_sockopt.optlen = sizeof(uint32_t); + } else { + afd_sockopt.mode = NT_AFD_SOCKOPT_GET; + afd_sockopt.optval = 0; + afd_sockopt.optlen = 0; + } + /* afd_sockopt */ - afd_sockopt.mode = NT_AFD_SOCKOPT_GET; afd_sockopt.level = level; afd_sockopt.optname = optname; - afd_sockopt.optval = 0; - afd_sockopt.optlen = 0; afd_sockopt.ding = 1; + /* ioctl */ hssocket->iostatus = __ntapi->zw_device_io_control_file( hssocket->hsocket, hssocket->hevent,