猿问

如下所示,请问在linux下socket编程中close()函数?

在socket编程中 建立一个描述符socket_fd
close(socket_fd);后 该描述符所对应的结构体的内容是否也一起被释放。
如果没有被释放 那我可不可以重新把该描述符的值(close前把值已经用变量保存起来了)赋值给 socket_fd继续使用???
望大虾们 帮帮忙?
那可不可以这样呢:
int socket_fd = socket(..);
int socket_x = socket_fd;
close(socket_fd);
int socket_fd2 = socket(..);
socket_fd2 = socket_x;
再使用socket_fd2会出现什么问题
如果这样会出现什么样的问题..?

那我想在一个主进程里建立多个socket如:
int socket1 = socket(..);
int socket2 = socket(..);
int socket3 = socket(..);
为了程序的需要会关闭其中几个socket
然后再进行连接
如:
close (socket1);
close (socket2);
然后再颠倒顺序重新建立: 
socket2 = socket();
socket1 = socket();
但是发现 新建立的两个socket描述的值符居然相同:
这是怎么回事??
哪位大虾 给说说..

眼眸繁星
浏览 330回答 2
2回答

墨色风雨

只要不用close或fclose,不管把这个socket_fd值存到哪里,都可以使用。比如:int socket_fd = socket(...);int socket_x = socket_fd;那么send(socket_x)和send(socket_fd)结果完全一致

侃侃无极

一、基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个整型的socket的描述符,随后的连接建立、数据传输等操作也都是通过该socket实现。1、socket函数syntax:int socket(int domain, int type, int protocol);功能说明:调用成功,返回socket文件描述符;失败,返回-1,并设置errno参数说明:  domain指明所使用的协议族,通常为PF_INET,表示TCP/IP协议;  type参数指定socket的类型,基本上有三种:数据流套接字、数据报套接字、原始套接字  protocol通常赋值"0"。  两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。socket数据结构中包含这五种信息。2、bind函数syntax:int bind(int sock_fd,struct sockaddr_in *my_addr, int addrlen);功能说明:将套接字和指定的端口相连。成功返回0,否则,返回-1,并置errno.
随时随地看视频慕课网APP
我要回答