UDP 소켓에 대해서 질문 하나 드립니다

tlling의 이미지

UDP 통신을 이용하여 클라이언트에서 서버로 데이터(클래스)를 전송하는데는 성공을 하였습니다

그래서 클라이언트에서 1분 간격으로 crontab을 이용해 자동으로 데이터를 전송하도록 하였습니다

서버는 백그라운드로 돌렸습니다.. 그런데 서버가 데이터를 한 30개 정도 받으니 세그멘테이션 오류가 뜨며

백그라운드가 종료되었습니다

서버는이렇게 되어있습니다


sock = socket(AF_INET, SOCK_DGRAM, 0); //소켓함수 호출
if (sock == -1)
{
printf("Socket Error!");
return -1;
}
printf("UDP complete.\n");


sockaddr_in serveraddr;

memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(9000);

retval = bind(sock, (sockaddr *) &serveraddr, sizeof(serveraddr));

if (retval == -1)
{
printf("Bind Error!");
return -1;
}
printf("Bind Complete.\n");

sockaddr_in clientaddr;
memset(&clientaddr, 0, sizeof(clientaddr));
int addrlen = sizeof(clientaddr);
memset(&clientaddr, 0, sizeof(clientaddr));

while(1)
{
retval = recvfrom(sock, (char*)&test, sizeof(test), 0, (sockaddr *)&clientaddr, (socklen_t*)&addrlen);

if(retval == -1)
{
printf("Recv Error");
return -1;
}


}

익명 사용자의 이미지

여러개의 user가 접속하나요?? bind와 recv를 서로 다른 thread에서 처리하셔야 할듯...

tlling의 이미지

여러개가 접속할때도 이런일이 생겨서 하나의 클라이언트만으로 실행해봐도 똑같은 결과였습니다..ㅠ

rookey94의 이미지

디버깅 정보를 활요하시면 도움이 되실듯합니다.

컴파일시 -g 옵션(디버깅 정보)을 활용하시고
서버가 죽을때 core 파일을 남겼을 겁니다.
없다면 core를 남기게 하시면 됩니다.(ulimit -a으로 조회하여 core항목 확인)
dbx, gdb를 이용하신다면 원인을 빠르게 찾을실수 있을 겁니다.

gdb 바이너리명 core

bushi의 이미지

다른 것은 모르겠고,

...
retval = recvfrom(sock, (char*)&test, sizeof(test), 0, (sockaddr *)&clientaddr, (socklen_t*)&addrlen);
...

test 의 타잎이 뭔지 다시 살펴보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.