2017-06-20 53 views
1

サーバ/クライアント通信を作成しようとしましたが、接続関数がerrno 88で失敗しました。このerrnoは試していることを意味しています非ソケットオブジェクトに対してソケット操作を行う)。ソケットに接続できませんでした - errno 88(cpp)

int main (int argc, char *argv[]) 
{ 
// Validity check 
if (argc != VALID_ARG_NUM) { 
    std::cout << INVALID_ARG; 
    return 0; // todo - return 0 is correct?? 
} 

int port; 
struct sockaddr_in server_address; 

// server_address initialization. 
server_address.sin_family = AF_INET; 
server_address.sin_port = htons((uint32_t)atof(argv[3])); 
server_address.sin_addr.s_addr = inet_addr(argv[2]); 
memset(&(server_address.sin_zero), '\0', sizeof(server_address)); 

// Create the client socket. 
if (sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0) { 
    std::cout << "ERROR: socket " << errno << "." << std::endl; 
    exit(1); 
} 
// Connect to server. 
if (connect(sockfd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) { 
    std::cout << "ERROR: connect " << errno << "." << std::endl; 
    std::cout << CON_FAIL; 
    close(sockfd); 
    exit(1); 
} 
....... 

ありがとうございます。

+0

Boostが利用可能な場合、またはダウンロードできる場合は、Boost Asioを使用してソケットプログラミングを行うことを強くお勧めします。 – Peri461

+0

'errno'のエラーコードは実際にはプラットフォームに依存します。ご使用のプラットフォーム(オペレーティングシステム)を教えてください。たとえば、 'strerror'はエラーコードから印字可能な文字列を取得します。 –

+0

申し訳ありませんが、OSはLinuxです。 –

答えて

1

文の優先

sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0 

です

sockfd = ((socket(AF_INET, SOCK_STREAM, 0)) < 0) 

となるため、暗黙的に整数に変換されるブール値が割り当てられます(またはsockfdの種類に関係なく)。おそらくあなたが意図したのは

(sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 
+0

ok、あなたが私に言ったように変更しました。パイプ。 –

+0

@MichalShalom:それはまったく別の問題です(https://stackoverflow.com/q/4584904/147845)。 – You

1

私は、この部分は、バッファオーバーランの原因になっていると思う:

memset(&(server_address.sin_zero), '\0', sizeof(server_address)); 

あなたはsomefieldsを書き込む前に、全体の構造体をゼロにする必要があります

struct sockaddr_in server_address; 
// server_address initialization. 
memset(&server_address, 0, sizeof(server_address)); 
server_address.sin_family = AF_INET; 
+0

私はそれを変更しましたが、まだerrno 88:/ –

0

です。通常、壊れたパイプとは、リモートピアが接続を閉じることを意味します。あなたのサーバーコードはOKですか?たぶんこのようなことをするのだろうか?

関連する問題