간단한 소켓프로그램밍의 오류 (유닉스에서)
#include _stdio.h
#include _stdlib.h
#include _string.h
#include _unistd.h
#include _arpa/inet.h
#include _sys/socket.h
//헤더파일 쪽에 < >로 표시해야하는데 안나와서 일단 보여주기 위해 _로 표시했습니다.
void error_handling(char *message);
int main(int argc, char *argv[])
{
int serv_sock;
int clnt_sock;
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size;
char message[] = "Hello World";
if(argc != 2)
{
printf("Usage : %s \n", argv[0]);
exit(1);
}
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
{
error_handling("socket() error");
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
{
error_handling("bind() error");
}
if(listen(serv_sock, 5) == -1)
{
error_handling("listen() error");
}
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock == -1)
{
error_handling("accept() error");
}
write(clnt_sock, message, sizeof(message));
close(clnt_sock);
close(serv_sock);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
오류상황
gcc hello_server.c -o hello 할경우에
정의 되지 않음 첫번째 참조된
가호 파일:
bind /var/tmp//ccrisDeh.o
accept /var/tmp//ccrisDeh.o
listen /var/tmp//ccrisDeh.o
socket /var/tmp//ccrisDeh.o
ld:치명적:기호참조 오류, hello에 출력에 기록되지않음?
이거 어떻게 오류 잡음?? 기본적인 소켓프로그래밍 중임.ㅠ
-lnsl 추가해 보세요.
-lnsl -lsocket 추가해 보세요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
#include <sys/types.h>
#include
추가해보세요...... 제가 보던 책과 같은 책을 보고 계신것 같은데......
sys/types.h를 빼먹었을 것 같습니다.
댓글 달기