我有一個客戶端 - 服務器應用程序,我正在使用tcp套接字。在從客戶端發送send()請求時,我總是遇到總線錯誤,程序終止。現在我做了一個小維基百科搜索,文章將總線錯誤歸因於(不存在的物理地址,未對齊的內存訪問以及訪問已被截斷的mmapped文件)。我發送的結構只有三個整數和一個枚舉實例,所以我不認爲對齊是一個問題。下面是代碼中的相關片段: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' ????? – 2012-02-23 15:36:58
要麼有重要的東西丟失,要麼你的編譯器真的很奇怪! – 2012-02-23 15:37:53
套接字ID有效嗎?什麼是'_commsg'?請提供更多的代碼。 – 2012-02-23 15:40:52