accept시에요

yurina의 이미지

프로그램에 서버와 클라이언트로 되있는데요..
잘돌아 갑니다.
그런데 가끔씩 서버를 띄우고 클라이언트가 접속하면
accept에서 멈춰있다가
클라이언트를 Ctrl-C로 강제로 끊으면
그때야 한꺼번에 디버깅한 화면이 뜨거든요...
프로그램 문제인가요 아님 서버문제인가요....
알려주세요....되다가 안되다가 하니까...미치겠습니당...ㅠ.ㅠ

sozu의 이미지

상황설명을 더 자세히 해주세요 :shock:

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

yurina의 이미지

main_process 4000 <=== 서버 띄웁니다.
demo_client 4000 <=== 클라이언트 띄웁니다.

정상적으로라면

SIGNAL WAIT
accept
SIGNAL WAIT
[02][yurina/이문선][F][0]
disconnect
SIGNAL WAIT

이런식으로...accept후에...클라이언트에서 보내는 메세지를 읽어서 뿌리고..
close시에 disconnect메세지를 뿌리거든요...
그런데....가끔씩

SIGNAL WAIT
accept

이 상황에서 멈추고 있다가 클라이언트 프로세스를 kill해버리면

SIGNAL WAIT
[02][yurina/이문선][F][0]
disconnect
SIGNAL WAIT

나머지 이 메세지가 나옵니다....

bugiii의 이미지

서버에서 메시지 출력을 어떻게 하고 계신지요?

yurina의 이미지

자체 라이브러리 만들어서 하거든요..
혹 그것 때문일까요? 흠....

소스입니다.

int _opendebug(char *logname)
{
	struct timeval	tp;
	char		*logpath;

	
	strcpy(logfile, logname);

	logpath = getenv("HOME");
	if (logpath == NULL)
		return -1;

	gettimeofday(&tp, NULL);

	strftime(logdate, sizeof(logdate), "%Y%m%d", localtime(&tp.tv_sec));

	sprintf(fullpath, "%s/c/yurina/log/%s", logpath, logdate);

	if (access(fullpath, F_OK) != 0)
		mkdir(fullpath, 0777);

	if (strlen(logname) == 0)	
	{
		logfp = NULL;
		return -2;
	}
	sprintf(fullfile, "%s/%s.log", fullpath, logname);
	
	logfp = fopen(fullfile, "a+");
	if (logfp == NULL)	
	{
		return -3;
	}

	return 0;
}

/*
** Debug format : <pid><hh:mm:ss:ms><fname><line> message
*/

int _debug(char *fname, int line, char *format, ...)
{
	struct timeval	tp;
	struct tm       res;
	va_list			argp;
	char			tbuff[128], buff[1024], fnamebuff[512], tmplogdate[512];
	char			*prt;
	int				i;

	
	memset(&fnamebuff, 0x00, sizeof(fnamebuff));
	prt = fnamebuff;

	/* file name만 축출한다 */
	for (i = 0; i < strlen(fname); i++)
	{	
		if (fname[i] == '/')	prt = fnamebuff;
		else	*prt++ = fname[i];
	}
	*prt = 0x00;
		
	gettimeofday((struct timeval *)&tp, NULL);

	strftime(tbuff, sizeof(tbuff), "%H:%M:%S", 
				localtime_r(&tp.tv_sec, &res));

	strftime(tmplogdate, sizeof(tmplogdate), "%Y%m%d", localtime_r(&tp.tv_sec, &res));

	if (strcmp(tmplogdate, logdate) != 0)
	{
		/* 날짜가 다음 날일때 */
		fclose(logfp);	
		_opendebug(logfile);
	}

	if (access(fullfile, F_OK) != 0)
	{
		/* file이존재하지 않을때: 지웠을때 */
		fclose(logfp);	
		_opendebug(logfile);
	}
	
	sprintf(buff, "<%d><%s:%03d><%.*s><%d>", 
					(int)getpid(),
					tbuff, 
					(int)tp.tv_usec / 1000,
					(int)strlen(fnamebuff)-2, 
					fnamebuff, 
					line);
	
	if (logfp != NULL) fprintf(logfp, "%s ", buff);

	va_start(argp, format);
	if (logfp != NULL) vfprintf(logfp, format, argp);
	va_end(argp);

	fflush(logfp);

	return 0;
}

void _closedebug()
{
	if (logfp != NULL)	fclose(logfp);
}

/********************************************************************************/
/* End Of Program								*/
/********************************************************************************/

_opendebug로 파일 열구요..
_debug로 쓰구요..
_closedebug로 닫습니다.
frowt의 이미지

풀소스가 아니므로 무효!
올리신 소스에는 문제가 없어 보이고요..(돌려보지는 않았습니다)
select 혹은 poll 에서 receive event 때에 처리가 문제가 있지 않나 생각됩니다.
blocking socket 으로 처리하는것일 경우에도 receive 때에 잘못인것 같습니다.
참고로, 여기 kldp 에서 리플 달아주는 분들은 한가하게 시간이 많아서 역추적해서 문제를 해결해주지 않습니다.
풀소스를 올리세요.. 링크를 걸던가.. 얼마나 대단한걸 만들길레 소스 맛배기만 보여주는지..
전이만 ==333

yurina의 이미지

흠.....풀소스 올리는건 무리라는걸 아시는지 모르시는지...
라이브러리랑이 얼마나 많은뎅......흠흠....바쁘신지는 알지만...
머 그렇게 말씀하실 것까지야...ㅡ.ㅡa

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.