记录一个使用socket库中遇到的问题,最近项目中遇到使用本地udp通信的情况,在编写程序过程中,发现调用recvfrom一直失败,返回-1,错误码10022(错误码很重要)。

排查了半个下午,终于发现原来是bind函数的问题。由于在文件开头使用了 using namespace std 导致默认的bind变成了 functional中的那个,而不是socket的bind,导致绑定一直没有成功。当然,也可能是套接字端口被占用,recvfrom直接返回-1(但运行不报错),错误码是10044和10022(放在不同地方)。解决方法就是,换一个端口。

解决方案:

  • 不要在文件中用 using namespace std
  • 使用 ::bind()
  • 换端口


原文链接:https://blog.csdn.net/tudouttttt/article/details/108026921

要求是:设备与主机之间是 UDP 通信,当刷新设备时,需要释放socket资源,然后再新建socket资源。(没有设置socket的地址重用属性,因为要防止会带来其他的隐患,比方说接收到旧的错误消息) sock为类成员变量 port也为类成员变量 (一些错误校验都省略了) 第一个版本: bool InitSocket()      sock = socket(AF_INE
int sockfd = socket(AF_INET, SOCK_DGRAM, 0); bzero((char *)&ca, sizeof(ca)); ca.sin_family = AF_INET; ca.sin_addr.s_addr = htonl(INADDR_ANY); ca.sin_port = htons(SERV_
1、问题描述 在没有 网络 数据的情况下执行 recv from()函数,程序没有进入阻塞等待,而是直接 返回 -1。上网搜索相关问题的解决方法,主要集中在 recv from()函数的参数没有匹配。 2、解决方法 struct sockaddr address; int len=0; int iResult = recv from(socket,data,sizeof(data),0,&address,&len); 解决方法:(int len = sizeof(addr...
从套接字上接收一个消息。对于 recv from ,可同时应用于面向连接的和无连接的套接字。 recv 一般只用在面向连接的套接字,几乎等同于 recv from,只要将 recv from的第五个参数设置NULL。 如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。 假如套接字上没有消息可以读取,除了套接字已被设置为非阻塞模式,否则接收调用会等待消息的到来。
客户端的程序连接上服务器后 recv 函数阻塞接受,有时会 返回 0,说明接收超时服务器主动断开了连接,需要重新connect服务器,但重新connect时会报“Transport endpoint is already connected”!!! 返回 0时正确处理方法是什么呢,大虾指教啊!!!!! 现象:说明服务器主动断开了客户端的连接 客户端应该调用close关闭,然后再连接 湖南馒头: 应用层(Application Layer):包含两个主要的操作接口:mmap 和 read/write。 mmap 系统调用:使用页面缓存(Page Cache),将文件内容映射到进程的虚拟地址空间。 应用程序可以直接通过指针访问文件内容,而无需通过传统的读写系统调用。 read/write 系统调用:使用缓冲区缓存(Buffer Cache),管理块设备的数据块。数据从磁盘读取到缓冲区缓存,再从缓冲区缓存复制到应用程序提供的缓冲区。 CMake中使用pthread的坑与解决方案 saipubw: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67791 深入linux内核架构--虚拟文件系统VFS(mount及lookup) weixin_43047367: mount struct的类图是用什么工具画的 在Qt-Creator中使用搜狗输入中文的最简单解决方法(不需要编译安装) 一个路人乙: 给张图片可以吗?根本找不到啊