我只是通過一些網站學習在Linux socket編程,這裏是使用TCP的我在服務器端代碼中的某些部分:分段錯誤(套接字編程(TCP)在C)
#define BufferLength 100
#define SERVPORT 3111
int main()
{
/* Variable and structure definitions. */
int sd, sd2, rc, length = sizeof(int);
int totalcnt = 0, on = 1;
char temp;
char buffer[BufferLength];
struct sockaddr_in serveraddr;
struct sockaddr_in their_addr;
fd_set read_fd;
/* Get a socket descriptor */
if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Server-socket() error");
exit (-1);
}
else
printf("Server-socket() is OK\n");
/* Allow socket descriptor to be reusable */
if((rc = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))) < 0)
{
perror("Server-setsockopt() error");
close(sd);
exit (-1);
}
else
printf("Server-setsockopt() is OK\n");
/* bind to an address */
memset(&serveraddr, 0x00, sizeof(struct sockaddr_in));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(SERVPORT);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Using %s, listening at %d\n", inet_ntoa(serveraddr.sin_addr), SERVPORT);
/* continue */
}
當我做了最後一行(printf(「使用......」)),我遇到了分段錯誤,爲什麼?謝謝。
你的代碼看起來不錯,它適用於我。在valgrind下運行它不會顯示任何與內存相關的問題,這些問題可以解釋段錯誤。我確實添加了所有必需的標題;我想你的問題可能是由於你錯過了其中的一個或多個。你的編譯器是否發出任何警告? –
約翰,我編譯這個程序時沒有警告。另外,當我運行類似的代碼時,我沒有任何分割錯誤。 – user
@user,我試着在我的Linux上編譯你的一段代碼,它運行時沒有任何分段錯誤。你確定分段錯誤發生在printf嗎? printf之後的代碼是什麼? –