-1

これは私のコードです

#include "basic.h"
#include "bp_socket.h"

int setup_tcp(char *port)
{
    struct sockaddr_in server_addr;
    in_port_t server_port;
    int sock;
    int retval;                     //return value

    if ((server_port = atoi(port)) < 0)
    {
        server_port = (in_port_t)DEFAULT_PORT;
        fprintf(stderr, "Error port: %d in line %d\n", (int)server_port, __LINE__);
        //fprintf(stderr, "Use default port: %d\n", DEFAULT_PORT);
    }

    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sock < 0)
    {
        return sock;
    }

    retval = listen(sock, 40);
    if (retval < 0)
    {
        return retval;
    }

    memset(&server_addr, 0, sizeof(struct sockaddr_in));
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port        = htons(server_port);
    server_addr.sin_family      = AF_INET;
    retval = bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
    if (retval < 0)
    {
        perror("bind");
        return retval;
    }

    return sock;
}

int main()
{
    printf("%d\n", setup_tcp("4558"));
    perror("");
    return 0;
}

コードをデバッグすると、bind()リターンが見つかりました-1

グーグルでマニュアルページを読みましたが、答えが見つかりませんでした。

関数setup_tcpはソケットを作成し、アドレスでバインドします。

a socketまたはを返しerrno valueます。

それを解決する方法。私は自分のコードを何度も読んでいました。

ありがとうございました!

4

1 に答える 1

1

listenの後にを移動する必要がありbindます。

bindソケットが既にバインドされている場合はエラーを返し、listenバインドされていないソケットでは自動的にランダムなポート番号にバインドします。

于 2012-11-27T13:19:48.767 に答える