事情是這樣的,我寫在C簡單的TCP套接字服務器(使用UNIX系統調用),我是不是能夠得到接受連接。Unix下C套接字服務器不接受連接
從我可以告訴,我通過服務器初始化拿到就好了,但是當我嘗試連接到我打印出來的端口(見下面的代碼)它拒絕彷彿無所不有。
更重要的是,當我用netstat端口甚至沒有使用。我並沒有在當前的設置中拋出任何錯誤,我都爲了創意而枯竭。
int main(){
int sock_fd;
int conn_fd;
struct sockaddr_in serv_addr;
struct sockaddr_in cli_addr;
socklen_t* serlen;
socklen_t* clilen;
clilen = malloc(sizeof(socklen_t));
serlen = malloc(sizeof(socklen_t));
*serlen = sizeof(serv_addr);
*clilen = sizeof(cli_addr);
/*=============================Create Socket=============================*/
//Create Socket
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if(sock_fd<0){
fprintf(stderr,"error creating socket\n");
exit(1);}
//Initialize Server Address Struct
bzero((char *) &serv_addr, *serlen);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0;
/*=============================Bind Address==============================*/
//Bind socket to an address
if(bind(sock_fd,(struct sockaddr*)&serv_addr,*serlen)<0){
fprintf(stderr,"error binding\n");
exit(1);}
//Get socket data
if(getsockname(sock_fd,(struct sockaddr*)&serv_addr, serlen)<0){
fprintf(stderr,"error with socket name");
exit(1);}
/*=============================Server Started============================*/
//Listen for connections
listen(sock_fd,32);
//Print port
printf("%i", serv_addr.sin_port);
conn_fd = accept(sock_fd,(struct sockaddr*)&cli_addr,clilen);
/**Do something exciting with my new connection**/
}
你檢查的iptables和SELinux的? – anishsane
檢查您的防火牆是否阻止了這些端口。 – askmish
已檢查並清除。他們是內核通過請求到插座爲「0」,所以我想象這是綁定的情況下自動分配的端口,但它是值得一試又 – darkpbj