【问题标题】:difference between file descriptor and socket file descriptor文件描述符和套接字文件描述符的区别
【发布时间】:2014-04-25 07:59:10
【问题描述】:

我可以将 open 调用返回的文件描述符绑定到套接字吗?

我正在尝试做类似的事情,

 filefd = open("path",O_RDWR);

 ...

 bind (filefd, (struct sockaddr *) &servaddr, sizeof(servaddr));
 connfd = accept (filefd, (struct sockaddr *) &cliaddr, &clilen);

为什么accept调用返回-1?

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    从应用程序的角度来看,区别在于您如何创建和使用描述符。一些系统调用可以采用任何类型的描述符,而另一些则需要特定类型的描述符。

    在您的情况下,如果您检查了错误,bind 调用也会返回 -1。当系统调用返回-1 时,您应该检查errno 以查看问题所在。您可以使用strerror 获取可打印的错误字符串,或使用perror 直接打印。

    【讨论】:

    • 文件和socket可以共享同一个fd吗?
    • @SagarPatni 不。您实际上可以将描述符视为数组的索引,如果您有两个不同的索引,它们将“指向”数组中的不同位置。
    • 我想做的是,在字符设备上提供一个套接字,因为系统调用的开销太大,所以我试图映射两个文件
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多