首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Winsock recv()不会阻止

Winsock是Windows操作系统提供的一组用于网络编程的API(应用程序编程接口),它允许开发人员创建网络应用程序并进行网络通信。其中的recv()函数用于从网络中接收数据。

recv()函数是一个阻塞函数,它会一直等待直到接收到数据或者发生错误。当没有数据可接收时,recv()函数会阻塞程序的执行,直到有数据到达为止。这意味着在调用recv()函数后,程序会暂停执行,直到接收到数据或者发生超时或错误。

recv()函数的语法如下:

代码语言:txt
复制
int recv(SOCKET s, char* buf, int len, int flags);

参数说明:

  • s:表示要接收数据的套接字(socket)。
  • buf:指向接收数据的缓冲区。
  • len:表示缓冲区的大小。
  • flags:用于指定接收数据的方式,一般设置为0即可。

recv()函数的返回值表示实际接收到的数据的字节数,如果返回值为0,表示连接已关闭。如果返回值为SOCKET_ERROR,表示发生了错误,可以通过调用WSAGetLastError()函数获取具体的错误代码。

在云计算领域中,recv()函数常用于网络通信中的数据接收阶段。它可以用于接收来自客户端的请求数据或者接收服务器端的响应数据。在实际应用中,可以通过循环调用recv()函数来接收大量的数据,直到接收完所有数据为止。

腾讯云提供了一系列与网络通信相关的产品,例如云服务器(CVM)、负载均衡(CLB)、弹性公网IP(EIP)等,可以满足不同场景下的网络通信需求。具体产品介绍和相关链接地址可以参考腾讯云官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iocp详解_iocp是异步io吗

大家好,又见面了,我是你们的朋友全栈君。 #include “SOCKET.h” #include <Windows.h> DWORD WINAPI ThreadProc(LPVOID pvParam); #define PORT 8080 #define LISTEN_QUEUE 200 // AcceptEx 和 GetAcceptExSockaddrs 的函数指针,用于调用这两个扩展函数 LPFN_ACCEPTEX lpfnAcceptEx; LPFN_GETACCEPTEXSOCKADDRS lpfnGetAcceptExSockAddrs; void PostAcceptEx(IOCPHandle_s & listenHandle) { IO_DATA_s * p_io_data = new IO_DATA_s; p_io_data->socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); listenHandle.Push(p_io_data); p_io_data->type = ACCEPT; lpfnAcceptEx(listenHandle.socket, p_io_data->socket, &p_io_data->addr, 0, 0, sizeof(SOCKADDR_IN) + 16, &p_io_data->len, &p_io_data->ol); } int main() { SocketInit(); IOCPHandle_s listenHandle; listenHandle.socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); listenHandle.addr.sin_family = AF_INET; listenHandle.addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); listenHandle.addr.sin_port = htons(PORT); HANDLE IOCPhandle; IOCPhandle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 ); ::CreateThread(0, 0, ThreadProc, (void *)IOCPhandle, 0, 0); ::bind(listenHandle.socket, (SOCKADDR *)&listenHandle.addr, sizeof(SOCKADDR)); ::listen(listenHandle.socket, LISTEN_QUEUE); CreateIoCompletionPort((HANDLE)listenHandle.socket, IOCPhandle, (unsigned long)&listenHandle, 0); // 使用AcceptEx函数,因为这个是属于WinSock2规范之外的微软另外提供的扩展函数 // 所以需要额外获取一下函数的指针, // 获取AcceptEx函数指针 GUID GuidAcceptEx = WSAID_ACCEPTEX; GUID GuidGetAcceptExSockAddrs = WSAID_GETACCEPTEXSOCKADDRS; DWORD dwBytes = 0; WSAIoctl( listenHandle.socket, SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidAcceptEx, sizeof(GuidAcceptEx), &lpfnAcceptEx, sizeof(lpfnAcceptEx), &dwBytes, NULL, NULL); // 获取GetAcceptExSockAddrs函数指针,也是同理 WSAIoctl( listenHandle.socket, SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidGetAcceptExSockAddrs, sizeof(GuidGetAcceptExSockAddrs), &lpfnGetAcceptExSockAddrs, sizeof(lpfnGetAcceptExSockAddrs),

01
领券