c - 将参数传递给 bind() 函数

标签 c sockets

我有这个程序,它应该只将一个套接字绑定(bind)到一个端口,而且我总是得到

failure while binding.

我可以毫无问题地编译它。

我应该向 servAddr 添加一些内容吗?

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Practical.h"

int main(int argc , char* argv[]){

    if(argc!=2){
        printf("Parameters : <server Port>");
    }

    in_port_t servPort=atoi(argv[1]);

    int servSock;
    if(servSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)<0){
        printf("error socket");
    }

    struct sockaddr_in servAddr;
    memset(&servAddr,0,sizeof(servAddr));
    servAddr.sin_family=AF_INET;
    servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servAddr.sin_port=htons(servPort);

    if(bind(servSock,(struct sockaddr*) &servAddr,sizeof(servAddr)) < 0){
        printf("failure while binding");
    }
}

最佳答案

=优先级低于 < , 添加额外的大括号:

if((servSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0){
  printf("error socket");}

没有这些大括号 servSock10 ,那绝对不是你想要的。另请注意,如果没有特权,您将无法绑定(bind)到低于 1024 的端口。

关于c - 将参数传递给 bind() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249697/

相关文章:

c - 为什么我的程序直接崩溃了

java - 通过套接字从 Objective-C 向 Java 发送数据

c select() 读取直到空字符

c - 我的 Mandelbrot 集代码有什么问题?

c - 内核代码不适用于 NVIDIA GPU,但适用于 CPU 模式

c++ - 一段时间后如何停用输入语句?

java - 如何将 Java 对象的实例从 Python 传递到 Java 应用程序

C#:无法在 TCP 服务器上接收大数据

flash - bytesAvailable,readUTF()和ProgressEvent.SOCKET_DATA

c - 将正方形拼成一个长方形