这可能看起来像一个愚蠢的问题,但我在家里没什么好做的。一直在做一个项目。我写了这段代码,但无法理解输出。有人可以解释 -
int MasterSocket[3];
int i = 0;
for(i=0; i<3; i++)
{
MasterSocket[i] = socket(AF_INET , SOCK_STREAM , 0);
}
for(i=0; i<3; i++)
{
printf("\n%d---\n", MasterSocket[i]);
}
OUTPUT -
ansh@daweed69-laptop:~/Ubuntu One/workspace/multiConnectionSockets/Debug$ ./multiConnectionSockets
3---
4---
5---
[评论更新:]
为什么描述符输出必须从3开始? 0,1和2是预定义的!?!?
答案 0 :(得分:2)
您期望这段代码可以做什么?如果您阅读socket()
函数的文档,则会说:
SYNOPSIS
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
RETURN VALUE
On success, a file descriptor for the new socket is returned. On
error, -1 is returned, and errno is set appropriately.
这告诉你socket()
在int
中返回并将其描述为“文件描述符” - 这只是操作系统用来引用打开文件或类文件资源的东西。所以当你跑:
s = socket()
您将s
设置为某个整数值,当在write()
或read()
系统调用中使用时,它指的是开放式网络连接。要了解套接字是什么以及如何使用它们,您应该阅读在搜索“套接字编程示例”时可以找到的众多结果之一。
答案 1 :(得分:1)
socket()系统调用返回文件描述符。在UNIX系统上将是一个整数。我不明白你是如何获得两次“3”文件描述符的。以下代码编译并且没有获得重复的文件描述符:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
void main() {
int MasterSocket[3];
int i = 0;
for(i=0; i<4; i++)
{
MasterSocket[i] = socket(AF_INET , SOCK_STREAM , 0);
}
for(i=0; i<4; i++)
{
printf("\n%d---\n", MasterSocket[i]);
}
}
更好地检查你的工作。