mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-10 15:03:22 +00:00
It looks like this was missing from the winsock bindings. Odin contains WSASocketW which I assume would also work for obtaining a socket, but socket() is distinct and is what I was using, so I assume others will want it too.
106 lines
2.7 KiB
Odin
106 lines
2.7 KiB
Odin
// +build windows
|
|
package sys_windows
|
|
|
|
foreign import ws2_32 "system:Ws2_32.lib"
|
|
|
|
@(default_calling_convention="stdcall")
|
|
foreign ws2_32 {
|
|
WSAStartup :: proc(wVersionRequested: WORD, lpWSAData: LPWSADATA) -> c_int ---
|
|
WSACleanup :: proc() -> c_int ---
|
|
WSAGetLastError :: proc() -> c_int ---
|
|
WSADuplicateSocketW :: proc(
|
|
s: SOCKET,
|
|
dwProcessId: DWORD,
|
|
lpProtocolInfo: LPWSAPROTOCOL_INFO,
|
|
) -> c_int ---
|
|
WSASend :: proc(
|
|
s: SOCKET,
|
|
lpBuffers: LPWSABUF,
|
|
dwBufferCount: DWORD,
|
|
lpNumberOfBytesSent: LPDWORD,
|
|
dwFlags: DWORD,
|
|
lpOverlapped: LPWSAOVERLAPPED,
|
|
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
|
|
) -> c_int ---
|
|
WSARecv :: proc(
|
|
s: SOCKET,
|
|
lpBuffers: LPWSABUF,
|
|
dwBufferCount: DWORD,
|
|
lpNumberOfBytesRecvd: LPDWORD,
|
|
lpFlags: LPDWORD,
|
|
lpOverlapped: LPWSAOVERLAPPED,
|
|
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
|
|
) -> c_int ---
|
|
WSASocketW :: proc(
|
|
af: c_int,
|
|
kind: c_int,
|
|
protocol: c_int,
|
|
lpProtocolInfo: LPWSAPROTOCOL_INFO,
|
|
g: GROUP,
|
|
dwFlags: DWORD,
|
|
) -> SOCKET ---
|
|
socket :: proc(
|
|
af: c_int,
|
|
type: c_int,
|
|
protocol: c_int,
|
|
) -> SOCKET ---
|
|
|
|
ioctlsocket :: proc(s: SOCKET, cmd: c_long, argp: ^c_ulong) -> c_int ---
|
|
closesocket :: proc(socket: SOCKET) -> c_int ---
|
|
recv :: proc(socket: SOCKET, buf: rawptr, len: c_int, flags: c_int) -> c_int ---
|
|
send :: proc(socket: SOCKET, buf: rawptr, len: c_int, flags: c_int) -> c_int ---
|
|
recvfrom :: proc(
|
|
socket: SOCKET,
|
|
buf: rawptr,
|
|
len: c_int,
|
|
flags: c_int,
|
|
addr: ^SOCKADDR,
|
|
addrlen: ^c_int,
|
|
) -> c_int ---
|
|
sendto :: proc(
|
|
socket: SOCKET,
|
|
buf: rawptr,
|
|
len: c_int,
|
|
flags: c_int,
|
|
addr: ^SOCKADDR,
|
|
addrlen: c_int,
|
|
) -> c_int ---
|
|
shutdown :: proc(socket: SOCKET, how: c_int) -> c_int ---
|
|
accept :: proc(socket: SOCKET, address: ^SOCKADDR, address_len: ^c_int) -> SOCKET ---
|
|
|
|
setsockopt :: proc(
|
|
s: SOCKET,
|
|
level: c_int,
|
|
optname: c_int,
|
|
optval: rawptr,
|
|
optlen: c_int,
|
|
) -> c_int ---
|
|
getsockname :: proc(socket: SOCKET, address: ^SOCKADDR, address_len: ^c_int) -> c_int ---
|
|
getpeername :: proc(socket: SOCKET, address: ^SOCKADDR, address_len: ^c_int) -> c_int ---
|
|
bind :: proc(socket: SOCKET, address: ^SOCKADDR, address_len: socklen_t) -> c_int ---
|
|
listen :: proc(socket: SOCKET, backlog: c_int) -> c_int ---
|
|
connect :: proc(socket: SOCKET, address: ^SOCKADDR, len: c_int) -> c_int ---
|
|
getaddrinfo :: proc(
|
|
node: cstring,
|
|
service: cstring,
|
|
hints: ^ADDRINFOA,
|
|
res: ^^ADDRINFOA,
|
|
) -> c_int ---
|
|
freeaddrinfo :: proc(res: ^ADDRINFOA) ---
|
|
select :: proc(
|
|
nfds: c_int,
|
|
readfds: ^fd_set,
|
|
writefds: ^fd_set,
|
|
exceptfds: ^fd_set,
|
|
timeout: ^timeval,
|
|
) -> c_int ---
|
|
getsockopt :: proc(
|
|
s: SOCKET,
|
|
level: c_int,
|
|
optname: c_int,
|
|
optval: ^c_char,
|
|
optlen: ^c_int,
|
|
) -> c_int ---
|
|
|
|
}
|