套接字:绑定新套接字后进程死亡

时间:2017-10-25 14:24:48

标签: c sockets ftp fork

我使用fork()在C中编写一个ftp服务器来处理多个客户端。该 创建零件和绑定零件如下:

//create socket
int createSocket()
{
    int listenfd;
    if ((listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) 
    {
        printf("Error socket(): %s(%d)\n", strerror(errno), errno);
        exit(1);
    }
    printf("socketfd is: %d\n", listenfd);
    return listenfd;
}

int bindSocketToServer(int listenfd, int port)
{
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = port;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bind(listenfd, (struct sockaddr*)&addr, sizeof(addr)) == -1) 
    {
        printf("Error bind(): %s(%d)\n", strerror(errno), errno);
        return -1;  
    }
    //It is normal here.
    pirntf("It is still normal here.\n");
    return 1;
}

pasvPort = 30000;
pasvFilefd = createSocket();
while(1)
{
    printf("start.\n");
    if(bindSocketToServer(pasvFilefd, pasvPort) > 0)
    {
        printf("going to break.\n"); 
        break;
    }
    else
        pasvPort += 1;
    printf("error.\n");
}
printf("Listening port%d", pasvPort); //It can be printed.

当我启动服务器并在主进程中侦听端口21时,这些工作正常。但是,当我试图处理&#pas;'命令并将套接字绑定到新端口,如下所示(在fork()创建的另一个进程中),进程终止,我不知道原因。

编辑:那是我如何使用fork()。在serveOneClient()中我处理了#pas;'命令。

pid = fork();
if(pid < 0)
{
    printf("Error fork(): %s(%d)\n", strerror(errno), errno);           
    continue;
}
else if(pid == 0)
{
    close(listenfd);
    serveOneClient(connfd);
    printf("serving one over.\n");
    close(connfd);
    return 0;
}
else
    close(connfd);

0 个答案:

没有答案