소켓 플밍을 하는데 connect()시 타임아웃을 설정하고 싶습니다.
운영체제 전체에 영향을 미치는건 그렇구 이프로그램 내에서만 적용하고자 합니다.
여기저기 찾아봤는데 커널설정을 변경해서 운영체제 전체에 적용되도록 하는 방법만 보이고 잘 모르겠네요..
답변 부탁드립니다.
저도 생각해 보았는데요
1. 간단히 alarm 을 사용, 이 방법은 문제가 있습니다. 스티븐스 책에 나옵니다.
2. 소켓을 non-block 으로 설정하고 select의 마지막인자에 타임아웃 시간값 넣기 이 방법은 멀티스레드에서 문제가 있습니다. 프로세스에서는 select를 한개만 사용할수 있으니까요 여러스레드가 select를 호출할 수 없습니다.
그런데 멀티스레드에서 각 소켓의 읽기나 쓰기, connect에 타임아웃을 지정하려면 어떻게 해야하죠?
꽤 오래전 읽은 책에 여러 소켓의 타임아웃을 배열로 저장 및 정렬해서
먼저 타임아웃되는 시간 구조체를 select에 인자로 넣어줘서
하나의 시간이 끝날때 마다 다음 시간구조체를
select()의 인자로 넣어주는 방법을 읽은 것 같은데요
이 방법말고 시스템이 제공하는 방법은 없나요?
이것도 책으로 보기만 해서 ......... 아훙. 그때 테스트 해볼걸..
고수님들 잠적하지 마시고 한말씀 올려주시길..
하나의 프로세스에서 여러 쓰레드들이 동시에 select를 호출할 수 있습니다.
텍스트 포맷에 대한 자세한 정보
<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]
ㅡ,.ㅡ
저도 생각해 보았는데요
1. 간단히 alarm 을 사용, 이 방법은 문제가 있습니다. 스티븐스 책에 나옵니다.
2. 소켓을 non-block 으로 설정하고
select의 마지막인자에 타임아웃 시간값 넣기
이 방법은 멀티스레드에서 문제가 있습니다.
프로세스에서는 select를 한개만 사용할수 있으니까요
여러스레드가 select를 호출할 수 없습니다.
그런데 멀티스레드에서 각 소켓의 읽기나 쓰기, connect에 타임아웃을 지정하려면 어떻게 해야하죠?
꽤 오래전 읽은 책에 여러 소켓의 타임아웃을 배열로 저장 및 정렬해서
먼저 타임아웃되는 시간 구조체를 select에 인자로 넣어줘서
하나의 시간이 끝날때 마다 다음 시간구조체를
select()의 인자로 넣어주는 방법을 읽은 것 같은데요
이 방법말고 시스템이 제공하는 방법은 없나요?
이것도 책으로 보기만 해서 ......... 아훙. 그때 테스트 해볼걸..
고수님들 잠적하지 마시고 한말씀 올려주시길..
하나의 프로세스에서 여러 쓰레드들이 동시에 select를 호출할 수 있습
하나의 프로세스에서 여러 쓰레드들이 동시에 select를 호출할 수 있습니다.
댓글 달기