内存中什么形式的套接字文件描述符?

时间:2011-02-21 15:48:20

标签: c sockets memory

int main()
{
int a;
struct sockaddr_in data;
data.sin_addr.s_addr = INADDR_ANY;
data.sin_family = AF_INET;
data.sin_port = htons(1111); //assuming run on little-endian a.k.a x86
a = socket(AF_INET,SOCK_STREAM,0);
bind(a,(struct sockaddr*)&data, sizeof(data));

close(a);
return 0;
}

现在专注于变量int a,我很好奇,integer file socket descriptor 如何成为receive in或{{的大门 1}}数据,sending out如何在内存中正常工作?

我认为在启动套接字时,int ainteger a的内核更改形式,但这真的是一个想法,究竟发生了什么?

任何人?

1 个答案:

答案 0 :(得分:3)

a是一个句柄,参见例如http://en.wikipedia.org/wiki/Handle_%28computing%29

内核在表中保留了所需的结构,因此每次引用句柄时,它都可以查找所需的数据。

你可以实现一个简单的句柄机制,例如:一个数组:

struct MyData {
  float f;
};

MyData TheArray[100];

void setFloat(int Handle, float v) {
  TheArray[Handle].f = v;
}

float getFloat(int Handle) {
  return TheArray[Handle].f;
}

您的函数用户只知道setFloat和getFloat存在。使用它,他不知道你如何在内部跟踪浮动,但仍然可以使用句柄可靠地访问它们。