socket과 스레드.

puresupe의 이미지

안녕하세요.

socket은 논리적으로 full-duplex 라고 알고있습니다. 물리적으로 half-duplex인 장치에 대해서도 socket은 full-duplex를
구현하게 되어있는 것으로 알고있습니다.

하나의 IrDA 모듈에대해서, 소켓 하나를 생성하여, 그 소켓을 이용하는 send/recv 스레드를 각각 만들었습니다.

IrDA는 half-duplex방식의 물리적 장치입니다. 빛의 간섭때문에, send후 일정시간 지연후 recv를 하는 장치입니다.

하지만 socket으로 IrDA 프로그래밍을 할때, 프로그래머는 IrDA의 half-duplex적인 특성을 고려하지 않고, full-duplex임을

가정하여 프로그래밍을 할수 있습니다.

하지만 IrDA끼리 핑테스트를 해봤을때, 주고받지를 못하더라구요.

제가 알고있는게 잘못된건지 알고싶습니다.

=============================================================================================================

send 부분을 스레드로 돌리지 않고. main()함수에서 while 루프 속에서 돌릴때는

정상적으로 핑테스트가 이루어집니다.

차이가 어디에있는걸까요..
=============================================================================================================

antaran의 이미지

음... IrDA쪽은 안해봐서 저도 명쾌히 예/아니오로 답변을 드릴 순 없지만,

개인적으로도 논리적으로는 질문하신 대로 구현이 되는 것이 맞다고 생각합니다.

핑 테스트가 어떤식으로 이루어졌는지는 잘 모르겠으나 가장 기본 단위 테스트 부터 해보시는 것이

어떨까 싶네요.

송신측 패킷 하나 전송 --> 수신 측 패킷 하나 수신. 이렇게 말이죠. 이렇게 하셨는데도 안되시는

거라면, (그리고 소켓 API에서는 성공을 리턴함에도 불구하고 말이죠 - 이 건 글의 내용상 그런 것 같은

느낌을 받았습니다만 - ) 흠... 곤란하군요.

생각나는 것은 device의 Tx/Rx 모드 전환 같은 것은 어떻게 이루어 지는 것인지. 자동인지 수동인지

혹은 선택 가능한 것인지. 그와 관련된 API가 어떤 것이 있는지. 등등.

윗 단의 send/recv가 호출되면 내부적으로 알아서 Tx/Rx로 바꾸는 것인지란 생각도 드네요.

가장 쉽게 생각할 수 있는 전송이 안되는 상황은

역시 sender는 send하는데 receiver는 준비가 안된 상황이 아닐까 싶습니다.

send()는 어찌됬건 socket buffer에 write했으니 성공을 리턴하고 IrDA단에선 실패하고 말이죠.

이거 질문에 오히려 질문만 드리고, 답변을 해드리는게 아니라 오히려 배우고 갈 것 같은 생각이

드는군요. ^_^;;

freestyle의 이미지

adaptation layer를 구현하시든가,
library 형태로 만드셔야 하는 거 아닌가요?

아닌가? :D

--------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

댓글 달기

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