📄 socketopswin32.cpp
字号:
/*
* Multiplatform Async Network Library
* Copyright (c) 2007 Burlex
*
* SocketOpsWin32.cpp - Win32 implementation of SocketOps.
*
*/
#include "Network.h"
#ifdef CONFIG_USE_IOCP
namespace SocketOps
{
// Create file descriptor for socket i/o operations.
SOCKET CreateTCPFileDescriptor()
{
// create a socket for use with overlapped i/o.
return ::WSASocket(AF_INET, SOCK_STREAM, 0, 0, 0, WSA_FLAG_OVERLAPPED);
}
// Disable blocking send/recv calls.
bool Nonblocking(SOCKET fd)
{
u_long arg = 1;
return (::ioctlsocket(fd, FIONBIO, &arg) == 0);
}
// Disable blocking send/recv calls.
bool Blocking(SOCKET fd)
{
u_long arg = 0;
return (ioctlsocket(fd, FIONBIO, &arg) == 0);
}
// Disable nagle buffering algorithm
bool DisableBuffering(SOCKET fd)
{
uint32 arg = 1;
return (setsockopt(fd, 0x6, TCP_NODELAY, (const char*)&arg, sizeof(arg)) == 0);
}
// Enable nagle buffering algorithm
bool EnableBuffering(SOCKET fd)
{
uint32 arg = 0;
return (setsockopt(fd, 0x6, TCP_NODELAY, (const char*)&arg, sizeof(arg)) == 0);
}
// Set internal buffer size to socket.
bool SetSendBufferSize(SOCKET fd, uint32 size)
{
return (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char*)&size, sizeof(size)) == 0);
}
// Set internal buffer size to socket.
bool SetRecvBufferSize(SOCKET fd, uint32 size)
{
return (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (const char*)&size, sizeof(size)) == 0);
}
// Closes a socket fully.
void CloseSocket(SOCKET fd)
{
shutdown(fd, SD_BOTH);
closesocket(fd);
}
// Sets reuseaddr
void ReuseAddr(SOCKET fd)
{
uint32 option = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&option, 4);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -