Skip to content

Seemingly incorrect C types being used internally #69

@Melvar

Description

@Melvar

Most obviously, the return type of the system calls send, recv, etc. are given as ssize_t, but the bindings in this library appear to use CInt, which is usually not the same on a 64-bit platform. I believe this works only because the same registers are used by the calling convention regardless of integer size, so the Haskell side simply reads only the low 32 bits, and single messages of 2 GiB size probably would not work anyway.

The reason this came up is that I am writing an extension to this library to send and receive file descriptors with unix domain sockets, which requires me to bind the sendmsg and recvmsg system calls. I used CSsize for the return type and found that the type of System.Socket.Unsafe.tryWaitRetryLoop is incompatible with that – it require CInt to be used.

Some places in the code also appear to use CInt in place of socklen_t, but that does appear to always be the same, according to a cursory search.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions