windows socket编程中调用recvfrom返回-1(windows error 10014)错误的问题

windows socket编程中调用recvfrom返回-1(windows error 10014)错误的问题

标签(空格分隔): socket


在windows平台下进行socket编程时,调用recvfrom函数,始终返回-1,然后根据WSAGetLastError()获取到错误码为10014,查了网上说的几乎所有方法,全部没有一点问题,代码如下:

    struct sockaddr_in remoteAddr;
    int nAddrLen = sizeof(remoteAddr);
    recvLen = recvfrom(serSocket, recvBuf, MAX_RECV_LENTH, 0, (struct sockaddr *)&remoteAddr, &nAddrLen);

用WSAGetLastError()查看错误码:10014
MSDN描述:WSAEFAULT
The buffer pointed to by the buf or from parameters are not in the user address space, or the fromlen parameter is too small to accommodate the source address of the peer address

在recvfrom中可以引起这个错误码的位置有两个,remoteAddr的大小与nAddrLen里面的值不匹配,这个是网上说的最多的,其实还有一个地方可以引起这个错误,recvBuf的大小与MAX_RECV_LENTH的值不匹配,即给定的接收buf实际占用的空间小于传入的bufLen的值。

但是这里有一点,始终没搞明白,在debug模式下,若:

    char recvBuf[100];
    int recvLen = 300;

则一旦执行了recvfrom()这个函数,就立马会返回-1,若将recvBuf设置为:

char recvBuf[200];

则不会返回-1,只要实际接收数据的长度不大于buf的实际长度,就是没有问题的。

但是编译出来直接运行.exe文件时,无论buf的实际大小和bufLen的值是多少,只要实际接收数据的长度不大于buf的实际长度就都不会有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值