1

man ページからの私の理解では、MSG_DONTROUTE が設定されている場合、パケットは送信元に直接接続された宛先にのみ送信されます。ただし、間接的に接続された宛先 (ルーティングが必要) にパケットを送信しようとすると、send() は依然として正の値を返します。私は何か誤解していますか、ありがとう?

ここに私のテストコードがあります:

int main (int argc, char *argv[]) {

    const char* ip = argv[1] ? argv[1] : "74.125.31.100"; // google

    int fd = socket (AF_INET, SOCK_STREAM, 0);
    if (fd == -1)
        ErrAndExit("socket");

    struct sockaddr_in addr;
    memset (&addr, 0, sizeof(sockaddr_in));
    addr.sin_family = AF_INET;
    addr.sin_port = htons (80);
    if (inet_pton (AF_INET, ip, &addr.sin_addr) != 1)
        ErrAndExit ("inet_pton");

    if (connect (fd, (struct sockaddr*) &addr, sizeof(addr)) == -1)
        ErrAndExit("connect");

    // int optval = 1;
    // int optlen = sizeof(optval);
    // if (setsockopt (fd, SOL_SOCKET, SO_DONTROUTE, (void*) &optval, optlen) == -1)
    //     ErrAndExit ("setsockopt");

    ssize_t written = send (fd, "apple", 6, MSG_DONTROUTE);
    if (written == -1)
        ErrAndExit ("send");
    else
        printf ("wrote %ld bytes\n\n", written);

    return 0;
}
4

0 に答える 0