2016-11-30 16 views
0

以下は、ローカルマシン上のIPv6クライアントプログラム用の私のコードです。このプログラムを実行すると、読み込みモードのように一時停止します。「開始:」も表示されません。 socket()システムコールの行にコメントすると、それだけが処理されます。ソケットプログラミング、ipv6クライアントプログラムが動作しない

#include<stdio.h> 
#include<string.h>  
#include<sys/socket.h> 
#include<arpa/inet.h> 
#include<unistd.h> 
#include<errno.h> 

int main(int argc, char *argv[]) 
{ 
    printf("Start:"); 
    int sock; 
    char msg[20]; 
    struct sockaddr_in6 server; 

    server.sin6_family=AF_INET6; 
    server.sin6_port=htons(8888); 
    inet_pton(AF_INET6, "127.0.0.1", &(server.sin6_addr)); 


    sock=socket(AF_INET6, SOCK_STREAM , 0); 
    if(sock == -1) 
    { 
    perror("Socket Creation Failed"); 
    return 1; 
    } 

    printf("Connecting"); 

    if(connect(sock, (struct sockaddr *)&server , sizeof(server)) < 0) 
    { 
    perror("Connection Failed"); 
    return 1; 
    } 

    if(read(sock, msg , sizeof(msg)) < 0) 
    { 
    perror("Reading Failed"); 
    return 1; 
    } 

    puts(msg); 
    } 
+2

出力がバッファにスタックされていないことを確認するために、 'printf'文の最後に' \ n'を付けてコードを試してください。 –

+4

'' 127.0.0.1 "'は有効なIPv6アドレスではありません – Gerhardh

答えて

0

問題はinet_pton関数です。 IPv6のformate(0:0:0:0:0:0:0:1)にループバックアドレスを渡した後、プログラムはうまく動作します。

0

あなたのプログラムはブロッキングリード(sock ...)でスタックしています。 printfを持つ場所をすべて追加する必要があります\n出力をprintfで出力するにはSTDOUTにフラッシュしてください!

関連する問題