我有这个程序,它应该只将一个套接字绑定(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");}
没有这些大括号 servSock
是1
或 0
,那绝对不是你想要的。另请注意,如果没有特权,您将无法绑定(bind)到低于 1024 的端口。
关于c - 将参数传递给 bind() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249697/