私はクライアントサーバーアプリケーションを持っていて、私はTCPソケットを使用しています。クライアント側からのsend()リクエストでは、私は常にバスエラーを受け取り、プログラムは終了します。今ではウィキペディア検索を少し行いました。記事ではバスエラーが(存在しない物理アドレス、アライメントされていないメモリアクセス、切り詰められたmmappedファイルへのアクセス)に属性しています。私が送信している私の構造は、ちょうど3つのintとenumインスタンスなので、整列が問題ではないと思います。メインでLinuxのTCPバスエラー
typedef struct _commsg
{
RequestType requestType;
int client_pid;
int request_id;
int sector;
}ComMsg;
:
/* Create a reliable, stream socket using TCP */
if ((sock_id = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
DieWithError("socket() failed\n");
/* Construct the server address structure */
memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */
echoServAddr.sin_family = AF_INET; /* Internet address family */
echoServAddr.sin_addr.s_addr = inet_addr(loopback_addr); /* Server IP address */
echoServAddr.sin_port = htons(SERVER_PORT); /* Server port */
/* Establish the connection to the echo server */
if (connect(sock_id, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
DieWithError("connect() failed");
if (send(sock_id, (void *)&_commsg, sizeof(ComMsg), 0) != sizeof(ComMsg))
DieWithError("send() sent a different number of bytes than expected");
とサーバ側の
:事前にrecv(clntSocket_fd, &_commsg, sizeof(ComMsg), 0);
おかげでここでは、コードの関連するスニペットがあります。
'&_commsg' ???? –
重要な行方不明があるか、コンパイラが本当に奇妙なことがありますか? –
はソケットIDが有効ですか?一体何が '_commsg'ですか?より多くのコードを提供してください。 –