Changelog of @hackage/socket 0.8.3.0

0.8.3.0 Lars Petersen info@lars-petersen.net 2020-06-29

  • Updates Stack LTS to 16.3

0.8.2.0 Lars Petersen info@lars-petersen.net 2018-10-31

  • Issue 61: Fixed unexpected IOError bubbling up from threadWaitSTM.
  • Added message flag msgPeek (MSG_PEEK).

0.8.1.0 Lars Petersen info@lars-petersen.net 2018-08-13

  • Issue 51: Add a getAddress operation for getting the local socket address.
  • Marked System.Socket.Type.Stream.receiveAll as deprecated. This is a preparation for a name reuse in upcoming 0.9.0.0.
  • Removed dead code (Message type).
  • Added error code ePermissionDenied.

0.8.0.1 Lars Petersen info@lars-petersen.net 2017-02-25

  • Issue 47: Fixed haddock documentation.
  • Issue 46: Export KeepAlive socket option in the main module.

0.8.0.0 Lars Petersen info@lars-petersen.net 2017-02-25

  • Issue 26: Show instances for SocketException and AddressInfoException no longer use strerror() and gai_strerror(), but simply show the name of the error code. Linking to gai_strerror() was problematic on Windows and strerror() was not thread-safe on Linux.

  • Issue 38: Added SO_KEEPALIVE as System.Socket.KeepAlive.

  • Issue 37: Added TCP_NODELAY as System.Socket.Protocol.TCP.NoDelay.

  • Issue 40: Changed allocation function to malloPlainForeignPtr. This mechanism used in the ByteString library is heavily optimised and 2 - 2.5 times faster than the previous implementation. See https://github.com/lpeterse/haskell-socket/pull/40 for details.

  • Issue 31: Added a Default protocol type.

  • Issue 27: Fixed a memory leak that manifested when interrupting threads waiting on socket events.

  • Issue 25: The awaitEvent: invalid argument was caused by the forked-off thread in threadWaitRead. The new code introduced by the changes caused by issue 27 catches and swallows this exception in a sane way.

  • Renamed unsafeSocketWaitRead/Write/Connected to waitRead/Write/Connected as these operations are not really unsafe, just internal. The operation signatures changed due to issue 27. Also, documented Windows specific implementation details.

  • The connect operation does no longer hold the lock on the socket while waiting for connection establishment.

  • Refactored and adapted the accept operation for changes caused by issue 27. Operation semantics shouldn't have changed.

  • Made SocketAddress an associated data family and added a Storable (SocketAddress f) constraint to the Family class. This allows omitting the Storable in socket operations (Family suffices now). It should be compatible with all existing code and not require any changes.

0.7.0.0 Lars Petersen info@lars-petersen.net 2016-11-13

  • Added function sendAllLazy and sendAllBuilder. Changed the signature and semantics of sendAll (thus the major version bump).

  • The MessageFlags constructor is now exported (kudos to Shea Levy for noting that this is necessary when writing extension libraries).

  • GHC 8 introduces a built-in alignment macro which is now used when present. This prevents re-definition warnings.

  • Fixed implicit function declaration warning concerning accept4. Defining GNU_SOURCE in the header file declares accept4 when present (see man accept4).

0.6.2.0 Lars Petersen info@lars-petersen.net 2016-08-15

  • Added functions for constructing internet addresses without the need for IO (inetAddressToTuple, inetAddressFromTuple, inet6AddressToTuple, inet6AddressFromTuple) as proposed by Erik Rantapaa.

0.6.1.0 Lars Petersen info@lars-petersen.net 2016-08-11

  • A potential race condition has been fixed (issue #18): c_get_last_error was supposed to return the error code of the last operation (if any). On Linux et.al. it just returned errno whereas on Windows it wrapped a call to WSAGetLastError. The problem was that the value of errno and WSAGetLastError is only valid when sampled immediately after the failed call. This could not be easily guaranteed the way it was implemented: GHC's RTS is potentially allowed to interrupt the thread between the failed call and the call to c_get_last_error (although this is very unlikely when no memory allocation is necessary). The content of errno might have been reset of overridden by another thread. The solution for this is that all FFI calls now take a pointer with a reserved memory location (allocated on the stack, so it's quite cheap) and the C functions immediately save the errno (if necessary). The unsafe ccalls are guaranteed to be uninterruptible.

  • All tests have been ported to tasty as previously proposed by Roman Cheplyaka.

  • Fixed connect operation to use getsockopt with SO_ERROR to determine socket connection status / error code instead of issuing a second connection attempt (see issue #15). On Windows, the solution is a bit more difficult: getsockopt return 0 unless the operation has either succeeded or failed. Unfortunately, there did not exist a mechanism to wait for this condition (GHC's IO manager lacks this feature). This has been circumvented by calling select for the socket with minimal timeout several times with an exponential back-off. Tests have been added to validate different aspects of this.

0.6.0.1 Lars Petersen info@lars-petersen.net 2016-04-10

  • Adapted the AddrInfo test suite to not depend on specific name resolution features that aren't available in a chroot() environment (see issue #12).

0.6.0.0 Lars Petersen info@lars-petersen.net 2016-03-26

  • Improved and adapted documentation.
  • Merged GetSocketOption and SetSocketOption to one single type class SocketOption.
  • getNameInfo now returns NameInfo instead of a tuple.
  • Added all theoretically possible SocketExceptions.
  • The type class GetNameInfo has been renamed to HasNameInfo.
  • The type class GetAddressInfo has been renamed to HasAddressInfo.
  • Removed operation withConnectedSocket without replacement. It should not be part of this minimal library. Its code can be retrieved from the repository if needed.
  • The operations sendAll and receiveAll are now exported through System.Socket.Type.Stream and no longer trough the main module. They are very specific, solely stream-oriented and just wrappers around the basic operations. Such operations shouldn't pollute the main module.
  • Issue #10: Ben Gamari reported that the associated type SocketAddress is not injective which would lead to compilation failure on GHC 8.* . This is fixed by using a data family instead.

0.5.3.0 Lars Petersen info@lars-petersen.net 2015-08-09

  • Added a test for eOperationNotSupported (try to listen on a UDP socket).
  • Niklas Hambüchen added eOperationNotSupported.

0.5.2.0 Lars Petersen info@lars-petersen.net 2015-07-08

  • Don't set msgNoSignal automatically with send and sendTo. This implicit behaviour is a bad design decision. The implications of this change are rather limited. The behaviour/correctness of an application is only affected if it hooked SIGPIPE. GHC's RTS by default ignores SIGPIPE since #1619. You're still advised to adapt your applications to use msgNoSignal explicitly when writing on stream oriented sockets. Otherwise the RTS gets unnecessarily interrupted. This is harmless, but annoying and not desired when developing high-performance applications.
  • Define msgNoSignal as 0 if not available and documented this behaviour.
  • Added new exception value ePipe.

0.5.1.0 Lars Petersen info@lars-petersen.net 2015-06-22

  • Exposed unsafeGetSocketOption and unsafeSetSocketOption.
  • Exposed socketWaitRead and socketWaitWrite through System.Socket.Unsafe.

0.5.0.0 Lars Petersen info@lars-petersen.net 2015-06-19

  • Introduced newtypes Port, FlowInfo and ScopeId in Inet6 family.
  • Renamed nearly everything in response to very constructive criticism by Bryan O'Sullivan. This is a breaking change (sorry about that). I felt this was the last chance to get this straight before the library gets widely adopted. Additional kudos to @ignorantone and @whatsthepoint.
  • Issue #7: Typo in documentation of inaddrNONE and inaddrBROADCAST. Kudos to Michael Fox.

0.4.0.1 Lars Petersen info@lars-petersen.net 2015-06-17

  • tar-ball did not contain relevant source files.

0.4.0.0 Lars Petersen info@lars-petersen.net 2015-06-16

  • Changed semantics of connect operation. It now blocks until a connection has either has been established or failed.
  • Added SO_ERROR socket option.
  • Added eALREADY exception constant.
  • Added eISCONN exception constant.
  • Added eNOTCONN exception constant.
  • Added convenience operation withConnectedSocket.
  • Added eNETUNREACH exception constant.
  • Added new operation recvAll and changed sendAll to lazy ByteString.
  • Added new socket option IPV6_V6ONLY.
  • Removed untested socket option SO_ACCEPTCONN.
  • Correctly defining AI_ flags on Windows (MinGW doesn't although they are all well support on Vista or higher).
  • Got all tests passing on Windows 7.

0.3.0.1 Lars Petersen info@lars-petersen.net 2015-06-07

  • Fixed documentation of eaiNONAME.
  • Fixed typo in .cabal file in reference to cbits file.

0.3.0.0 Lars Petersen info@lars-petersen.net 2015-06-07

  • AddrInfoFlags and NameInfoFlags are now instances of Bits.
  • Dropped all sendmsg/recvmsg related operations (harden the core first!)
  • Dropped support for UNIX socket (will be separate package socket-unix)
  • Renamed type function Address to SockAddr.
  • Added GetAddrInfo and GetNameInfo classes.
  • Dropped support for SCTP (will be separate package socket-sctp)
  • Added support for RAW sockets.
  • Started to support Windows (still unfinished).
  • New operation recvRecord.
  • ReceiveMsg now returns a strict ByteString.
  • New operations sendV, sendToV.
  • Restricted getAddrInfo and getNameInfo and added getAddrInfo6 and getNameInfo6
  • Added address family types INET, INET6 and UNIX (API breaking change)
  • Hide SockAddrIn6 address constructor
  • Hide SockAddrIn address constructor
  • Added recvMsg operation
  • Fixed unsafeSend, unsafeSendTo and unsafeSendMsg (they were waiting for a read event instead of waiting for writing)
  • Use aiStrError values in Show instance
  • Added aiStrError function
  • Added constants for AddrInfoException
  • Changed definitin of AddrInfoException
  • Added sendAllMsg operation
  • Added sendMsg operation (+ some types and internals)

0.2.0.0 Lars Petersen info@lars-petersen.net 2015-05-29

  • Added a sendAll operation
  • Exposed the Socket constructor
  • Added getNameInfo operation
  • Added msgWAITALL and fixed serious bug regarding all other MsgFlags
  • Nicer Show instances for SockAddrIn and SockAddrIn6
  • Hiding internal modules
  • Added getAddrInfo operation

0.1.0.1 Lars Petersen info@lars-petersen.net 2015-05-28

  • Added CHANGELOG.md
  • Removed threadWaitReadMVar and threadWaitWriteMVar
  • Import Data.Monoid in System.Socket.Unsafe to support older Preludes

0.1.0.0 Lars Petersen info@lars-petersen.net 2015-05-28

  • Initial release