{-# LANGUAGE CPP #-}#include "HsNetDef.h" moduleNetwork.Socket.Name(getPeerName ,getSocketName ,socketPort ,socketPortSafe )whereimportForeign.Marshal.Utils(with)importNetwork.Socket.Imports importNetwork.Socket.Internal importNetwork.Socket.Types -- | Getting peer's socket address.getPeerName::SocketAddress sa =>Socket ->IOsa getPeerName s =withNewSocketAddress $\ptr sz ->with(fromIntegralsz )$\int_star ->dofd <-fdSocket s throwSocketErrorIfMinus1Retry_ "Network.Socket.getPeerName"$c_getpeername fd ptr int_star _sz <-peekint_star peekSocketAddress ptr -- | Getting my socket address.getSocketName::SocketAddress sa =>Socket ->IOsa getSocketName s =withNewSocketAddress $\ptr sz ->with(fromIntegralsz )$\int_star ->dofd <-fdSocket s throwSocketErrorIfMinus1Retry_ "Network.Socket.getSocketName"$c_getsockname fd ptr int_star peekSocketAddress ptr foreignimportCALLCONVunsafe"getpeername"c_getpeername::CInt->Ptrsa ->PtrCInt->IOCIntforeignimportCALLCONVunsafe"getsockname"c_getsockname::CInt->Ptrsa ->PtrCInt->IOCInt-- ----------------------------------------------------------------------------- socketPort---- The port number the given socket is currently connected to can be-- determined by calling $port,ドル is generally only useful when bind-- was given $aNY\_PORT$.-- | Getting the port of socket.-- `IOError` is thrown if a port is not available.socketPort::Socket -- Connected & Bound Socket->IOPortNumber -- Port Number of SocketsocketPort s =dosa <-getSocketName s casesa ofSockAddrInet port _->returnport SockAddrInet6 port ___->returnport _->ioError$userError"Network.Socket.socketPort: AF_UNIX not supported."-- ----------------------------------------------------------------------------- socketPortSafe-- | Getting the port of socket.socketPortSafe::Socket -- Connected & Bound Socket->IO(MaybePortNumber )-- Port Number of SocketsocketPortSafe s =dosa <-getSocketName s return$casesa ofSockAddrInet port _->Justport SockAddrInet6 port ___->Justport _->Nothing