telnet - Segmentation Fault 11 when telnetting in (C) -
i'm learning how create servers in c , keep getting "segmentation fault: 11" error when try telnetting server terminal. appreciated!
#include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <errno.h> void error(char *msg) { fprintf(stderr, "%s: %s\n", msg, strerror(errno)); exit(1); } int main(int argc, char *argv[]) { char *advice[] = { "take smaller bites\r\n", "go tight jeans. no not make fat.\r\n", "one word: inappropriate\r\n", "just today, honest. tell boss *really* think\r\n", "you might want rethink haircut\r\n" }; int listener_d = socket(pf_inet, sock_stream, 0); struct sockaddr_in name; name.sin_family = pf_inet; name.sin_port = (in_port_t)htons(30000); name.sin_addr.s_addr = htonl(inaddr_any); if(bind(listener_d, (struct sockaddr *) &name, sizeof(name))== -1) error("cannot bind"); if (listen(listener_d, 10) == -1) error("cannot listen"); puts("waiting connection"); while(1) { struct sockaddr_storage client_addr; unsigned int address_size = sizeof(client_addr); int connect_d = accept(listener_d, (struct sockaddr *) &client_addr, &address_size); char msg = advice[0]; if (send(connect_d, msg, strlen(msg), 0) == -1) error("cannot send"); close(connect_d); } return 0; }
you're storing advice[0] char rather char *. won't fit, , truncated, making pointer invalid. store in char * (or const char *) instead.
i'd recommend turning on warnings in compiler, since have caught mistake. gcc , clang, use -wall -wextra -pedantic.
Comments
Post a Comment