비 차단 방식으로 클라이언트 소켓을 사용할 수 있습니까? 내가 서버에 내가 그 소켓에 재귀 recv
을 할 것을 연결하는 클라이언트 소켓을 작성하는 경우, 데이터 전송 및 연결이에 의해 폐쇄되지 않은 경우없는 경우OCaml 비 차단 클라이언트 소켓
는 예를 들어, Unix.recv
의 마지막 호출이 차단됩니다 서버.
socket()
및 소켓 유형MSG_DONTWAIT
플래그- 또는
receiv()
와 OR 연산SOCK_NONBLOCK
플래그를 사용 :C에서, 당신은 모두 플래그를 지정할 수 있습니다.
여기 보았다 :
- http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#TYPEsocket_bool_option
- http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#TYPEsocket_type
- http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#TYPEmsg_flag
- https://ocaml.github.io/ocamlunix/ocamlunix.html#sec119
하지만 여기에 대한 정보를 찾을 수 없습니다.
'recv() recv()''는 아무런 의미가 없습니다. – EJP
예, 맞습니다. 죄송합니다. 모든 데이터가 읽힐 때까지 재귀 함수에서'recv'를 호출 할 때 말하고 싶었습니다. 어쩌면 모든 데이터를 읽을 때까지'recv'를 여러 번 호출해야합니다. – cedlemo
Lwt (http://ocsigen.org/lwt/2.5.2/manual/)를 보셨습니까? 그것은 비 블로킹 작업을위한 많은 도구를 제공합니다. 예를 들어,'Lwt_unix.recv' (http://ocsigen.org/lwt/2.5.2/api/Lwt_unix#VALrecv)는'Unix.recv'와 같은 non-blocking 기능을합니다. – hcarty