I have a socket server in C/linux. Each time I create a new socket it is assigned a file descriptor. I want to use these FD’s as uniqueID’s for each client. If they are guaranteed to always be assigned in increasing order (which is the case for the Ubuntu that I am running) then I could just use them as array indices.
So the question: Are the file descriptors that are assigned from linux sockets guaranteed to always be in increasing order?
FD’s are guaranteed to be unique, for the lifetime of the socket. So yes, in theory, you could probably use the FD as an index into an array of clients. However, I’d caution against this for at least a couple of reasons:
As has already been said, there is no guarantee that FDs will be allocated monotonically. accept() would be within its rights to return a highly-numbered FD, which would then make your array inefficient. So short answer to your question: no, they are not guaranteed to be monotonic.
Your server is likely to end up with lots of other open FDs – stdin, stdout and stderr to name but three – so again, your array is wasting space.
I’d recommend some other way of mapping from FDs to clients. Indeed, unless you’re going to be dealing with thousands of clients, searching through a list of clients should be fine – it’s not really an operation that you should need to do a huge amount.