On 7/1/21 4:46 PM, Victor Stewart wrote: > On Thu, Jul 1, 2021 at 3:51 PM Pavel Begunkov <asml.silence@xxxxxxxxx> wrote: [...] >>> sockfd, fds, 1); >> >> s/fds/&fds[sockfd]/ >> >> Does it help? io_uring_register_files_update() doesn't >> apply offset parameter to the array, it's used only as >> an internal index. > > i see yes, it works it like this! > > io_uring_register_files_update(&ring, fd, &(socketfds[fd]), 1); > io_uring_register_files_update(&ring, fd, &(socketfds[fd] = -1), 1); > > and this behavior is clear upon a closer reading of... > https://github.com/axboe/liburing/blob/11f6d56302c177a96d7eb1df86995939a4feb736/test/file-register.c#L80 > > i guess it's sometimes ambiguous whether int* is requesting an array > or an actual pointer to a single int. It's an array, just element 0 is registered as a registered file with index @off, element 1 as a reg-file with index @(off+1) and so on. > all good now. > >> >>> + >>> + if (result != 1) >>> + { >>> + fprintf(stderr, "file update failed\n"); >>> + goto err; >>> + } >>> } >>> >>> + use_fd = sockfd; >>> + >>> sqe = io_uring_get_sqe(ring); >>> io_uring_prep_recv(sqe, use_fd, iov->iov_base, iov->iov_len, 0); >>> if (registerfiles) >>> >> >> -- >> Pavel Begunkov -- Pavel Begunkov