ocaml simplistic http server with the Unix module
我正在尝试使用低级Unix模块制作一个非常简单的http服务器
以便更好地了解http服务器的实际工作方式。
这是我当前的代码:
1 2 3 4 5 6 7 8 | let () = let socket_fd = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in let _ = Unix.bind socket_fd (Unix.ADDR_INET ((Unix.inet_addr_of_string"127.0.0.1"), 8888)) in let _ = Unix.listen socket_fd 1 in let (file_descr,sockaddr) = Unix.accept socket_fd in let b = Bytes.create 1024 in let _ = Unix.recv file_descr b 0 0 [Unix.MSG_PEEK] in print_endline b; |
当我打开网络浏览器时
部分答案在于recv的C映射(sendrecv:.opam / version / build / ocaml / otherlibs / unix / sendrecv.c)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CAMLprim value unix_recv(value sock, value buff, value ofs, value len, value flags) { int ret, cv_flags; long numbytes; char iobuf[UNIX_BUFFER_SIZE]; cv_flags = convert_flag_list(flags, msg_flag_table); Begin_root (buff); numbytes = Long_val(len); if (numbytes > UNIX_BUFFER_SIZE) numbytes = UNIX_BUFFER_SIZE; enter_blocking_section(); ret = recv(Int_val(sock), iobuf, (int) numbytes, cv_flags); leave_blocking_section(); if (ret == -1) uerror("recv", Nothing); memmove (&Byte(buff, Long_val(ofs)), iobuf, ret); End_roots(); return Val_int(ret); } |
因此,第一个
新年快乐;)