Hello,<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I have modified my aioError and aioReturn to hopefully be more in line with the actual aio_error and aio_return signatures, respectively. In the first implementation I had suffered a serious brain f**t ... oh well ..... The implementations below are still somewhat preliminary. Not seemingly rocket science .... I am still not getting a correct count from aioReturn .. should be 20 but I get 0! I have a C program which behaves properly giving 20 for aio_return! grrrrrr!<br>
<br>aioReturn :: AIOCB -&gt; IO (AIOCB, ByteCount)<br>aioReturn aiocb = do<br>&nbsp;&nbsp; allocaBytes (#const sizeof(struct aiocb)) $ \ p_aiocb -&gt; do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poke p_aiocb aiocb<br>-- DO A PEEK HERE!!!!!<br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count &lt;- throwErrnoIfMinus1 &quot;aioReturn&quot; (c_aio_return&nbsp; p_aiocb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count &lt;- (c_aio_return&nbsp; p_aiocb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;count -&gt; &quot; ++ (show count))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aiocb &lt;- peek p_aiocb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn &quot;aioReturn&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aiocb1 &lt;- peek p_aiocb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dumpAIOCB aiocb1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (aiocb, fromIntegral count)<br><br>foreign import ccall safe &quot;aio.h aio_return&quot;<br>&nbsp;&nbsp;&nbsp; c_aio_return :: Ptr AIOCB -&gt; IO CInt<br><br><br><br>aioError :: AIOCB -&gt; IO (Errno)<br>aioError aiocb = do<br>
&nbsp;&nbsp; allocaBytes (#const sizeof(struct aiocb)) $ \ p_aiocb -&gt; do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poke p_aiocb aiocb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --throwErrnoIfMinus1 &quot;aioError&quot; (c_aio_error&nbsp; p_aiocb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errno &lt;- (c_aio_error&nbsp; p_aiocb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;errno -&gt; &quot; ++ (show errno))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn &quot;aioError&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aiocb1 &lt;- peek p_aiocb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dumpAIOCB aiocb1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Errno errno)<br><br>foreign import ccall safe &quot;aio.h aio_error&quot;<br>&nbsp;&nbsp;&nbsp; c_aio_error :: Ptr AIOCB -&gt; IO CInt<br>
<br><br><br>I added an internal helper function dumpAIOCB to print out the aiocb at points for sanity checking!!<br><br>dumpAIOCB :: AIOCB -&gt; IO ()<br>dumpAIOCB (AIOCB aioFd aioLioOpcode aioReqPrio aioOffset aioBuf aioBytes aioSigevent) = do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn &quot;aiocb dump&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;fd =&gt; &quot; ++ (show aioFd))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;opcode =&gt; &quot; ++ (show aioLioOpcode))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;prio =&gt; &quot; ++ (show aioReqPrio))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;offset =&gt; &quot; ++ (show aioOffset))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- aioBuf<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn (&quot;nbytes =&gt; &quot; ++ (show aioBytes) ++ &quot;\n&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- aioSigevent<br>
<br><br>Kind regards, Vasili<br><br><br><br>&nbsp;&nbsp; <br>