【发布时间】:2014-11-15 17:43:31
【问题描述】:
我正在使用 Linux Mint,并且正在尝试开发一个服务器端应用程序,该应用程序将侦听特定端口。我尝试将端口设置为使用htons(0),但仍然是同样的问题。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
float calculator(char *calculation);
extern int errno;
int main(int argc,char **argv)
{
int clientaddrlen, listenfd, connectfd, bytes_rcvd, listen_queue_size=1;
short int port_no;
char readBuff[1000];
struct sockaddr_in servaddr, clientaddr;
pid_t childpid;
int status;
char sendBuff[1025];
if(argc!=3){
printf("Usage Format: ./server -p <PortNumber>\n");
printf("Sample Run: ./server -p 2000\n");
exit(1);
}
port_no = atoi(argv[argc-1]);
printf("Server running at port #%d\n", port_no);
// Create server socket.
if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
fprintf(stderr, "Cannot create server socket! errno %i: %s\n",errno,strerror(errno));
exit(1);
}
printf("Server socket created\n");
// Bind (attach) this process to the server socket.
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port_no);
errno = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
if(errno < 0){
printf("Server bind failure errno %i: %s\n",errno,strerror(errno));
exit(1);
}
鉴于我的代码在其他机器上运行,我想我的系统有问题。我得到的错误是
Server bind failure errno -1: Unknown error -1
这是在绑定系统调用之后,由于某种原因在我的系统中返回 -1。我的系统中是否存在导致此问题的问题?
【问题讨论】:
-
您尝试使用哪个端口号?为什么在调用
bind()之后不删除显然不相关的几十行? -
@BillLynch 编辑了我的答案,我尝试了不同的端口号和 htons(0),但它仍然崩溃
-
显着改变您的问题并不是一个好主意。因此,一些评论和/或答案可能变得难以理解!
-
OT:
short int port_no;不会正确存储值> 0x7ff。请改用unsigned short int(或只是int)。
标签: c sockets linux-mint