socket 관련 질문입니다.

hana9423의 이미지

서버 프로그램을 작성하고 있습니다.
지금 문제는
TCP/IP 연결을 사용하고 있는데 클라이언트에서 연결을 요청하고 서버에서는
그 연결을 accept하여서 client socket에 연결해 주었습니다.
여기까지는 문제가 없는데..
이제 연결된 Channel을 사용하여 어떠한 메세지를 받으면 그 연결을 다른
Client Socket로 넘겨주고 이전의 Client socket은 사용을 안하려고 합니다.
말이 좀 어렵네요..
Windows에서는 CAsyncSocket::Detach 함수를 사용해서 핸들을 넘겨서
사용했던것 같은데.. 리눅스에서는 이럴때 어떻게 넘겨 주어야 하는지..

벌써 4일째 .. 이것만 보고 있는데 답이 안나오네요.. 답변 부탁드립니다.

pynoos의 이미지

연결된 socket 은 단지 int 값일 뿐입니다.

다른 변수에 넣어 그대로 사용가능합니다.

원하시는 것이 혹시 다른 descriptor 번호라면 dup2 를 하신후에 원래 descriptor를 close 하시면 됩니다.

펑키의 이미지

서버 프로그램을 작성하고 있습니다.
지금 문제는
TCP/IP 연결을 사용하고 있는데 클라이언트에서 연결을 요청하고 서버에서는
그 연결을 accept하여서 client socket에 연결해 주었습니다.
여기까지는 문제가 없는데..
이제 연결된 Channel을 사용하여 어떠한 메세지를 받으면 그 연결을 다른
Client Socket로 넘겨주고 이전의 Client socket은 사용을 안하려고 합니다.
말이 좀 어렵네요..
Windows에서는 CAsyncSocketDetach 함수를 사용해서 핸들을 넘겨서
사용했던것 같은데.. 리눅스에서는 이럴때 어떻게 넘겨 주어야 하는지..

벌써 4일째 .. 이것만 보고 있는데 답이 안나오네요.. 답변 부탁드립니다.

죄송하지만 대답하기전에 질문이 더 어려운듯 하네요. 정확히 어떠한것을 원하는지 잘 모르겠어요. 헤헤~ 하여간 질문을 정확히 해주시는게 더 빠른 답을 얻으실수 있을거 같아요. 대충 생각해보면 dup()나 dup2()로 해결을 하실려고 하는건지 하여간 다시 질문 주세요.

zsani2의 이미지

Quote:

이제 연결된 Channel을 사용하여 어떠한 메세지를 받으면 그 연결을 다른
Client Socket로 넘겨주고 이전의 Client socket은 사용을 안하려고 합니다.
말이 좀 어렵네요..

이런것인가요?
listening socket -> client socket#1 -> client socket#2
윗분 답변대로 dup을 사용하셔서 file discriptor를 넘기거나(이게 의도하시는 방법같네요.) 좀더 확실히 하시려면 클라이언트의 정보를 넘겨서 소켓을 새로 만드시면 되겠지요.

mushim의 이미지

Quote:
이제 연결된 Channel을 사용하여 어떠한 메세지를 받으면 그 연결을 다른
Client Socket로 넘겨주고 이전의 Client socket은 사용을 안하려고 합니다.
말이 좀 어렵네요..

표현이 좀 애매하긴 하지만, 추정에 다른 프로세스나 쓰레드로 어떻게 연결을 넘기는지에 대한 질문같군요.

프로세스의 경우 fork 한다음
부모는 해당 file discriptor 를 close 하면 되구요.
쓰레드의 경우는, pthread_create 하면 되겠죠.
부모는 해당 file discriptor 를 close 하면 되구요.(단, 자식 쓰레드가 생성되기 전에 닫는것을 막기위해서 좀 트릭을 써야 할것 같네요. 일반적으로 알려진 방법이 뭐죠?)

프로세스나 쓰레드를 새로 생성하지 않고 다른 프로세스로 연결해주는 방법은
제가 자세히는 모르고, 아래를 참조하시기 바랍니다.

http://www.ezdoum.com/stories.php?story=02/07/18/6030539

댓글 달기

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