tar_fdopen,以前使用过的文件描述符

时间:2015-12-17 10:10:41

标签: c sockets tar

我使用 libtar 编写客户端服务器,通过套接字将存档发送到服务器。

此代码有效(服务器端):

socket_fd = socket(AF_INET,SOCK_STREAM,0));

bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(PORT_MIGRATION_COPY);

bind(socket_fd,(struct sockaddr *)&addr, sizeof(addr));

listen(socket_fd,1);    // Only 1 client

size_addr_cl = sizeof(addr_cl);
socket_cl = accept(socket_fd, (struct sockaddr *) &addr_cl, &size_addr_cl); // Wait until client arrives

tar_fdopen(&tar, socket_cl, NULL, NULL, O_RDONLY, 0644, 0);
tar_extract_all(tar, path);
tar_close(tar);
close(socket_fd);

此外,我需要在存档之前读取一个整数,所以我把:

read(socket_fd, (char *)&number,sizeof(int));

tar_fd_open之前,并在客户端中添加相应的行:

 write(socket_fd, (char *)&number,sizeof(int));

坏消息,焦油提取物停止工作,我无法弄清楚原因。为什么先前的读/写会干扰文件描述符的下一个操作?

1 个答案:

答案 0 :(得分:1)

哦,我发现了这个愚蠢的错误,我正在读取socket_fd而不是socket_cl!该死。