我只是通过一些网站学习在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之后的代码是什么? –