/********************************************************/ /* ntapi: Native API core library */ /* Copyright (C) 2013--2021 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ /********************************************************/ #include <psxtypes/psxtypes.h> #include <ntapi/nt_object.h> #include <ntapi/nt_file.h> #include <ntapi/nt_socket.h> #include <ntapi/ntapi.h> #include "ntapi_impl.h" int32_t __cdecl __ntapi_sc_setsockopt( __in nt_socket * hssocket, __in int32_t level, __in int32_t optname, __in const void * optval, __in uint32_t optlen, __out nt_iosb volatile * iosb) { nt_afd_sockopt_info afd_sockopt; nt_iosb volatile siosb; iosb = iosb ? iosb : &siosb; /* afd_sockopt */ afd_sockopt.mode = NT_AFD_SOCKOPT_SET; afd_sockopt.level = level; afd_sockopt.optname = optname; afd_sockopt.optval = optval; afd_sockopt.optlen = optlen; afd_sockopt.ding = 1; hssocket->iostatus = __ntapi->zw_device_io_control_file( hssocket->hsocket, hssocket->hevent, 0, 0, iosb, NT_AFD_IOCTL_SOCKOPT, &afd_sockopt, sizeof(afd_sockopt), 0, 0); return hssocket->iostatus ? __ntapi->sc_wait(hssocket,iosb,0) : NT_STATUS_SUCCESS; }