错误代码:

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错误相关推荐

  1. alin的学习之路(Linux网络编程:一)(网络模型、帧格式、socket套接字、服务器端实现)

    alin的学习之路(Linux网络编程:一)(网络模型.帧格式.socket套接字.服务器端实现) 1. 协议 协议是一组规则,规定了如何发送数据.通信的双发都需要遵守该规则 2. 网络分层结构模型 ...

  2. 【Linux网络编程】TCP网络编程中connect listen和accept三者之间的关系

    00. 目录 文章目录 00. 目录 01. TCP服务端和客户端流程 02. connect函数 03. listen函数 04. 三次握手 05. accept函数 06. 附录 01. TCP服 ...

  3. linux网络编程中listen函数 backlog的含义

    结论: backlog 是用来指定在TCP连接时,同时进行 3次握手建立连接的客户端数量 listen函数在一般在调用bind之后-调用accept之前调用, 它的函数原型是: #include< ...

  4. linux网络重置报错,Linux网络编程中EAGAIN错误和EINTR错误

    在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...

  5. Linux网络编程中的几组类似功能的区别

    1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...

  6. Linux网络编程中EAGAIN错误和EINTR错误

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Lin ...

  7. linux网络编程中端口号和ip地址转换方法

    0.字节序 网络字节序:是大端序,即:高字节放在低地址位置 比如:0x7F000101 对于一个整型,如上,我们看到的该形式,只是在大小端主机中存储的顺序是相反的. 网络序的存储方式是  7F 00 ...

  8. Linux网络编程基础:listen函数

    listen函数 1)头文件 #include <sys/types.h> #include <sys/socket.h> 2)函数声明形式 int listen(int so ...

  9. Linux网络编程中tcp_server和tcp_client函数的封装

    2019独角兽企业重金招聘Python工程师标准>>> 本文的主要目的是将server套接字和client套接字的获取,做一个简易的封装,使用C语言完成. tcp_server 服务 ...

最新文章

  1. Server 2012 Hyper-v新功能之一:客户端 Hyper-V
  2. UPX命令行压缩、反汇编动画进入、OllyDbg搜索命令功能
  3. Python零碎知识(1):strip lstrip rstrip使用方法
  4. Exchanging Partitions and Subpartitions with Tables--官方文档
  5. yarn timeline1,timeline2官网解释
  6. android 显示字符串最后一个字,android – 在textview中显示的最后一个单词
  7. matplotlib学习笔记.CookBook
  8. C++ 虚函数重载多态
  9. python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例
  10. 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
  11. python拦截修改数据包_拦截指定数据、修改JS -- mitmproxy
  12. 全网首发:WINDOWS主机与MAC虚拟机文件访问的解决办法
  13. nginx源码分析—reuseport的使用
  14. dragonfly数据库
  15. MFC软件欢迎界面(基于对话框,VS2013)
  16. 求一个好用的简洁设置的PPT倒计时器
  17. 安卓手机免root权限恢复微信聊天记录(以vivo手机为例)
  18. 今日收获 可以点击的标签 鼠标悬浮 小手图标
  19. 伯禹公益AI《动手学深度学习PyTorch版》Task 05 学习笔记
  20. ❥关于C++之函数指针函数对象

热门文章

  1. 华尔街日报:苹果与高盛计划今年联合发行信用卡
  2. 请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等 方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp
  3. 从VC6到VC9移植代码问题总结收藏
  4. wdr7300千兆版和百兆版区别_tl-wdr7300是百兆还是千兆(图文)
  5. 笔记本电脑计算机目录下无法显示视频设备,笔记本电脑摄像头怎么打开?
  6. python压缩数据长度_如何解码在python HTTP响应中返回的gzip压缩数据?
  7. 郑州有哪些牛逼的互联网企业
  8. 人工智能算法一集成学习(随机森林)
  9. UCOS-II在MC9S12XS128上的移植
  10. [创业-20]:财务报表 - 所有者权益之资本公积