다중 접속 tcp server 구현시 여러개의 port를 동시 지원, tcp client 기능 지원

circle07의 이미지

현재 다중 접속을 지원하는 tcp server를 개발하고 있습니다. (초보 프로그래머입니다. ^^;)

그런데 3개의 포트 번호를 동시에 지원하려고 합니다.

bind, accept, listen을 wrapping하는 class를 생성하여 3개의 인스턴스를 만들고 쓰레드로 동시에 다른 포트 번호를 이용하여 구동하려고 합니다.
(메인 쓰레드 3개를 생성합니다.)

각 쓰레드에서 다중 접속 처리도 역시 논블록 함수를 이용하여 쓰레드로 생성하여 개별 read, write를 처리하려고 합니다.

이와 동시에 메인 쓰레드 격인 client기능을 하는 class의 인스턴스를 만들고 다른 PC Server로 접속하려고 합니다. (1초마다 주기적으로 connect - read/write - close 호출을 무한 반복)

정리하면 총 4개의 메인 쓰레드가 동시에 main함수에서 호출되어 생성되고, 각 메인 쓰레드에서는 다른 PC의 client 다중 접속을 쓰레드로 처리하는 방식입니다.

위처럼 구현하는 방식에 문제가 없을까요?

예를들어서 socket()함수를 호출하여 fd를 받는데 fd 번호가 서로 꼬인다던지, 서로 다른 fd를 이용하여 통신 한다던지 하는 오류요.

현재 vxworks에서 위와 비슷한 형식으로 구현하였는데(pthread 대신 taskSpawn을 이용)

client 기능을 활성화 시키면 종종 kernel exception을 내면서 죽어버리는데,

linux에서는 위처럼 구성시 문제가 없을지 궁긍합니다.

그리고 위에서 server class에서 FD_SET, select 를 이용하여 구현하게 된다면, 3개의 server 쓰레드가 1024개의 FD를 동시에 사용하게 될것 같은데, 개별로 영역을 구분해서 사용할 수 있도록 해야 할까요?

select를 이용하여 다중접속 처리 기능도 간단하게 구성해 봤는데, 역시나 client 쓰레드가 같이 실행되면 이상하게 프로그램이 죽는 현상이 있습니다.

vxworks에 대한 정보가 많이 부족하여 linux 코드 및 정보를 많이 참조하는데, 적용하기가 쉽지 않네요.

조언 부탁드립니다.

댓글 달기

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