Network.recvFrom strangeness

The declaration of Network.recvFrom looks strange: recvFrom :: HostName -> PortID -> IO String I thought that recvFrom should _return_ the address of the peer, not require it as an argument? At least that's what the corresponding 4.4BSD routine does: | ssize_t recvfrom(int s, void *buf, size_t len, int flags, | struct sockaddr *from, socklen_t *fromlen); | | DESCRIPTION | The recvfrom and recvmsg calls are used to receive messages | from a socket, and may be used to receive data on a socket | whether or not it is connection-oriented. | | If from is not NULL, and the socket is not connection-oriented, | the source address of the message is filled in. The argument | fromlen is a value-result parameter, initialized to the size of | the buffer associated with from, and modified on return to | indicate the actual size of the address stored there. By the way: I am not sure whether HostName is the appropriate type here! IMHO the routine should rather return the _address_ of the peer, not the hostname. (For example, what does it return when the resolver fails?) Peter
participants (1)
-
Peter Simons