socket fdopen问题
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/socket.h>
#include <string.h>
#include <fcntl.h>
int main(void) {
struct sockaddr_in sin;
struct sockaddr_in cin;
int lfd;
int afd;
FILE * fp;
socklen_t len;
char buf[400];
bzero(&sin,sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(8000);
sin.sin_addr.s_addr = INADDR_ANY;
lfd = socket(AF_INET,SOCK_STREAM,0);
if(lfd < 0) {
perror("socket");
exit(1);
}
if(bind(lfd,(struct sockaddr *)&sin,sizeof(sin)) == -1) {
perror("bind");
exit(1);
}
listen(lfd,10);
while(1) {
bzero(buf,400);
afd = accept(lfd,(struct sockaddr *)&cin,&len);
if(afd < 0) {
perror("afd");
exit(1);
}
printf("错在哪?\n");
fp = fdopen(afd,"a+");
fgets(buf,400,fp);
printf("%s\n",buf);
fclose(fp);
close(afd);
}
return EXIT_SUCCESS;
}
每次加上
fp = fdopen(afd,"a+");
fgets(buf,400,fp);
printf("%s\n",buf);
这几行,我设置断点,居然在:
afd = accept(lfd,(struct sockaddr *)&cin,&len);这一行出错:
运行结果:
afd: Invalid argument
如果不加这几行,就不报错?为什么?求解
...全文
相关推荐
Linux/UNIX系统编程手册
Linux/UNIX 系统编程手册代码 只有代码 没有电子书 没有电子书
文件描述符与 FILE 指针互转
方向用法说明fd → FILE*给 fd 加上 stdio 缓冲FILE* → fdfileno(fp)让 FILE 用底层系统 API。
Linux下C编程电子书
第 1章 编译与调试 第 2章 C语言基础 第 3章 C程序的常用语句 第 4章 数组与指针 第 5章 函 数 第 6章 字符与字符串处理 第 7章 结构体 第 8章 时间函数 第 9章 目录与文件 第 10章 文件I O 第 11章 网络编程 第 12章 无连接的套接字通信 第 13章 面向连接的套接字通信
linux系统编程
这篇文档比较全面的描述了Linux的系统编程 全部是结合实例讲解,都是一些牛人的博客里面的 分为IO、进程和线程、网络编程三部分!
UNIX环境高级编程
unix环境高级编程,包括基本I/O操作,进程,进程间通信,数据库开发的等重难点内容!


