summaryrefslogtreecommitdiffhomepage
path: root/src/socket/ntapi_sc_getsockopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/socket/ntapi_sc_getsockopt.c')
-rw-r--r--src/socket/ntapi_sc_getsockopt.c15
1 files changed, 12 insertions, 3 deletions
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,