Store information about a client connection
Synopsis:
#include <sys/neutrino.h>
int ConnectClientInfo( int scoid,
                       struct _client_info * info
                       int ngroups );
int ConnectClientInfo_r( int scoid,
                         struct _client_info * info
                         int ngroups );
Arguments:
- scoid
- A server connection ID that identifies the client process that you want to get information about,
  or -1 to get information about the calling process.
  This client is typically a process that's made a connection to the server to try to access a resource.
  You can get it from the
  _msg_info
  argument to
  MsgReceivev() or
  MsgInfo().
- info
- A pointer to a
  _client_info
  structure that the function can fill with information about the client.
  For more information, see below.
- ngroups
- The size of the caller's grouplist in the credential
    part of the _client_info structure.
    If you make it smaller than NGROUPS_MAX, you might get
    information only about a subset of the groups.
    
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
These calls get information about a client connection identified by
scoid, and store it in the buffer that info points to. 
Note: 
These functions can handle no more than 
NGROUPS_MAX supplementary groups.
For more groups, use
ConnectClientInfoExt()
instead.
 
The ConnectClientInfo() and ConnectClientInfo_r()
functions are identical except in the way they indicate errors.
See the Returns section for details.
A server uses these functions to determine whether or not a client has
permission to access a resource. 
For example, in a resource manager, it would be called on an 
open()
connection request.
_client_info structure
The _client_info structure has at least the following members:
- uint32_t nd
- The client's node descriptor, a temporary numeric description
  of a remote node; ND_LOCAL_NODE (or 0) is the descriptor for the local node.
  For more information, see the
  Qnet Networking
  chapter of the System Architecture guide.
  
- pid_t pid
- The client's process ID.
- pid_t sid
- Used internally by Qnet.
- flags
- 
  
  - _NTO_CI_ENDIAN_BIG — the client is on a big-endian machine.
    
  
- _NTO_CI_BKGND_PGRP — the client's process group is in the background.
    
  
- _NTO_CI_ORPHAN_PGRP — the client's process group has been orphaned.
    
  
- _NTO_CI_STOPPED — the client is stopped.
    
  
- _NTO_CI_UNABLE — the client doesn't have the required abilities; see
    ConnectClientInfoAble(),
    procmgr_ability(),
    and
    procmgr_ability_create().
    
  
- _NTO_CI_FULL_GROUPS — indicates that the client information contains the full
    group list.
    Set by ConnectClientInfoExt(), but not ConnectClientInfo().
    
  
 
- struct _cred_info cred
- A _cred_info
  structure that describes the user and group ID credentials of the sending process.
  
  
  The ngroups argument to ConnectClientInfo() indicates
  the size of the grouplist array in the _cred_info structure.
  If the group array size is zero, the ngroups member of the
  _cred_info is set to the number of groups available.
   
Returns:
The only difference between these functions is the way they indicate errors:
- ConnectClientInfo()
- If an error occurs, the function returns -1 and sets
  errno. 
  Any other value returned indicates success.
- ConnectClientInfo_r()
- EOK is returned on success. 
  This function does NOT set errno.
  If an error occurs, the function can return any value in the Errors section.
Errors:
- EFAULT
- A fault occurred when the kernel tried to access the buffers provided.
- EINVAL
- Process doesn't have a connection scoid.
Classification:
QNX Neutrino
| Safety: |  | 
|---|
| Cancellation point | No | 
| Interrupt handler | No | 
| Signal handler | Yes | 
| Thread | Yes |