Linux网络编程中出现 listen fail : Socket operation on non-socket错误
错误代码:
int main (int argc,char *argv[])
{int lfd = 0,cfd = 0;/* 定义服务器地址结构 和 客户端地址结构*/struct sockaddr_in ser_addr,cli_addr; /* 客户端地址结构大小*/socklen_t cli_addr_len;char cli_ip[1024],buf[1024];/*地址结构 ip+端口号*/ser_addr.sin_family = AF_INET; /* IPv4*/ser_addr.sin_port = htons(SER_PORT); /* 转为网络字节序的 端口号*/ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 获取本机任意有效IP*/lfd = socket(AF_INET,SOCK_STREAM,0);if(lfd == -1)sys_err("socket fail \n");**lfd = bind(lfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr));****if(lfd == -1) sys_err("bind fail \n");lfd = listen(lfd,128);if(lfd == -1) sys_err("listen fail \n");****cli_addr_len = sizeof(cli_addr);
/*accept的第二个参数是传出参数,传出和该服务器连接的客户端*/cfd = accept(lfd,(struct sockaddr *)&cli_addr,&cli_addr_len);if(cfd == -1) sys_err("accept fail \n");
......
}
用gcc编译以后,运行,报错:
listen fail : Socket operation on non-socket
经过一番检查,发现是接受 函数bind()和函数listen()的返回值的变量有错,不应该使用lfd,lfd在这里是socket函数返回的文件描述符,他是accept函数的输入。所以这里应该重新定义一个变量。
改动如下:
int lfd = 0,cfd = 0;**int num;**......**num** = bind(lfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr));if(**num** == -1) { sys_err("bind fail \n");}**num** = listen(lfd,128);if(**num** == -1) {sys_err("listen fail \n");}cli_addr_len = sizeof(cli_addr);
/*accept的第二个参数是传出参数,传出和该服务器连接的客户端*/cfd = accept(lfd,(struct sockaddr *)&cli_addr,&cli_addr_len);if(cfd == -1){ sys_err("accept fail \n");}
问题解决!!
Linux网络编程中出现 listen fail : Socket operation on non-socket错误相关推荐
- alin的学习之路(Linux网络编程:一)(网络模型、帧格式、socket套接字、服务器端实现)
alin的学习之路(Linux网络编程:一)(网络模型.帧格式.socket套接字.服务器端实现) 1. 协议 协议是一组规则,规定了如何发送数据.通信的双发都需要遵守该规则 2. 网络分层结构模型 ...
- 【Linux网络编程】TCP网络编程中connect listen和accept三者之间的关系
00. 目录 文章目录 00. 目录 01. TCP服务端和客户端流程 02. connect函数 03. listen函数 04. 三次握手 05. accept函数 06. 附录 01. TCP服 ...
- linux网络编程中listen函数 backlog的含义
结论: backlog 是用来指定在TCP连接时,同时进行 3次握手建立连接的客户端数量 listen函数在一般在调用bind之后-调用accept之前调用, 它的函数原型是: #include< ...
- linux网络重置报错,Linux网络编程中EAGAIN错误和EINTR错误
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...
- Linux网络编程中的几组类似功能的区别
1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...
- Linux网络编程中EAGAIN错误和EINTR错误
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Lin ...
- linux网络编程中端口号和ip地址转换方法
0.字节序 网络字节序:是大端序,即:高字节放在低地址位置 比如:0x7F000101 对于一个整型,如上,我们看到的该形式,只是在大小端主机中存储的顺序是相反的. 网络序的存储方式是 7F 00 ...
- Linux网络编程基础:listen函数
listen函数 1)头文件 #include <sys/types.h> #include <sys/socket.h> 2)函数声明形式 int listen(int so ...
- Linux网络编程中tcp_server和tcp_client函数的封装
2019独角兽企业重金招聘Python工程师标准>>> 本文的主要目的是将server套接字和client套接字的获取,做一个简易的封装,使用C语言完成. tcp_server 服务 ...
最新文章
- Server 2012 Hyper-v新功能之一:客户端 Hyper-V
- UPX命令行压缩、反汇编动画进入、OllyDbg搜索命令功能
- Python零碎知识(1):strip lstrip rstrip使用方法
- Exchanging Partitions and Subpartitions with Tables--官方文档
- yarn timeline1,timeline2官网解释
- android 显示字符串最后一个字,android – 在textview中显示的最后一个单词
- matplotlib学习笔记.CookBook
- C++ 虚函数重载多态
- python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例
- 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
- python拦截修改数据包_拦截指定数据、修改JS -- mitmproxy
- 全网首发:WINDOWS主机与MAC虚拟机文件访问的解决办法
- nginx源码分析—reuseport的使用
- dragonfly数据库
- MFC软件欢迎界面(基于对话框,VS2013)
- 求一个好用的简洁设置的PPT倒计时器
- 安卓手机免root权限恢复微信聊天记录(以vivo手机为例)
- 今日收获 可以点击的标签 鼠标悬浮 小手图标
- 伯禹公益AI《动手学深度学习PyTorch版》Task 05 学习笔记
- ❥关于C++之函数指针函数对象
热门文章
- 华尔街日报:苹果与高盛计划今年联合发行信用卡
- 请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等 方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp
- 从VC6到VC9移植代码问题总结收藏
- wdr7300千兆版和百兆版区别_tl-wdr7300是百兆还是千兆(图文)
- 笔记本电脑计算机目录下无法显示视频设备,笔记本电脑摄像头怎么打开?
- python压缩数据长度_如何解码在python HTTP响应中返回的gzip压缩数据?
- 郑州有哪些牛逼的互联网企业
- 人工智能算法一集成学习(随机森林)
- UCOS-II在MC9S12XS128上的移植
- [创业-20]:财务报表 - 所有者权益之资本公积