Я получаю ошибку сегментации в моем вызове getaddrinfo и не могу понять, почему. Это происходит как на моем сервере, так и на клиенте. Некоторый код (на стороне сервера) -
class TcpServer {
public:
TcpServer(int);
~TcpServer();
void launchServer();
void communicate();
private:
const char* port;
int fd;
int comm_fd;
};
в tcpserver.cpp-
void TcpServer::launchServer() {
int status;
struct addrinfo hints;
struct addrinfo *servinfo; //will point to the results
//store the connecting address and size
struct sockaddr_storage their_addr;
socklen_t their_addr_size;
//socket infoS
memset(&hints, 0, sizeof hints); //make sure the struct is empty
hints.ai_family = AF_INET; //local address
hints.ai_socktype = SOCK_STREAM; //tcp
hints.ai_flags = AI_PASSIVE; //use local-host address
//get server info, put into servinfo
if ((status = getaddrinfo("127.0.0.1", port, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
exit(1);
}
в основном-
TcpServer server(4950);
server.launchServer();
int
, переданный конструктору, преобразуется в const char*
для порта.
Когда я запускаю GDB, он возвращает мне след -
#0 0xb7dca737 in getaddrinfo (name=0x8054824 "127.0.0.1",
service=0x1356 <Address 0x1356 out of bounds>, hints=0xbffff20c,
pai=0xbffff234) at ../sysdeps/posix/getaddrinfo.c:2080
#1 0x08050f79 in TcpServer::launchServer (this=0xbffff304) at tcpserver.cpp:25
#2 0x0804eae9 in main (argc=1, args=0xbffff3f4) at mainserver.cpp:47
Так что «Адрес 0x1356 вне границ» заставляет меня поверить, что с портом что-то не так, но я не знаю, что может быть не так. Если кто-то может указать на что-то не так, я был бы благодарен. Спасибо за любую помощь.