了解socket()输出

时间:2014-01-21 03:46:46

标签: c linux sockets serversocket

这可能看起来像一个愚蠢的问题,但我在家里没什么好做的。一直在做一个项目。我写了这段代码,但无法理解输出。有人可以解释 -

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是预定义的!?!?

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]);
  }
}

更好地检查你的工作。