\doxysection{src/core/osmo\+\_\+io\+\_\+internal.h File Reference}
\label{osmo__io__internal_8h}\index{src/core/osmo\_io\_internal.h@{src/core/osmo\_io\_internal.h}}
{\ttfamily \#include $<$unistd.\+h$>$}\newline
{\ttfamily \#include $<$stdbool.\+h$>$}\newline
{\ttfamily \#include $<$netinet/sctp.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/osmo\+\_\+io.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/linuxlist.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/select.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/socket.\+h$>$}\newline
{\ttfamily \#include \char`\"{}../config.\+h\char`\"{}}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ iofd\+\_\+backend\+\_\+ops}
\item 
struct \textbf{ osmo\+\_\+io\+\_\+fd}
\item 
struct \textbf{ iofd\+\_\+msghdr}
\begin{DoxyCompactList}\small\item\em serialized version of \textquotesingle{}struct msghdr\textquotesingle{} employed by sendmsg/recvmsg \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ OSMO\+\_\+\+IO\+\_\+\+DEFAULT\+\_\+\+MSGB\+\_\+\+SIZE}~1024
\item 
\#define \textbf{ OSMO\+\_\+\+IO\+\_\+\+DEFAULT\+\_\+\+MSGB\+\_\+\+HEADROOM}~128
\item 
\#define \textbf{ OSMO\+\_\+\+IO\+\_\+\+BACKEND\+\_\+\+DEFAULT}~\char`\"{}POLL\char`\"{}
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+CLOSED}~(1$<$$<$0)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+IN\+\_\+\+CALLBACK}~(1$<$$<$1)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+TO\+\_\+\+FREE}~(1$<$$<$2)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+NOTIFY\+\_\+\+CONNECTED}~(1$<$$<$3)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+FD\+\_\+\+REGISTERED}~(1$<$$<$4)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+SET}(iofd,  flag)~ (iofd)-\/$>$\textbf{ flags} $\vert$= (flag)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+UNSET}(iofd,  flag)~ (iofd)-\/$>$\textbf{ flags} \&= $\sim$(flag)
\item 
\#define \textbf{ IOFD\+\_\+\+FLAG\+\_\+\+ISSET}(iofd,  flag)~((iofd)-\/$>$\textbf{ flags} \& (flag))
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ iofd\+\_\+msg\+\_\+action} \{ \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+READ}
, \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+WRITE}
, \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+RECVFROM}
, \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+SENDTO}
, \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+RECVMSG}
, \newline
\textbf{ IOFD\+\_\+\+ACT\+\_\+\+SENDMSG}
 \}
\item 
enum \textbf{ iofd\+\_\+seg\+\_\+act} \{ \newline
\textbf{ IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+HANDLE\+\_\+\+ONE}
, \newline
\textbf{ IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+HANDLE\+\_\+\+MORE}
, \newline
\textbf{ IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+DEFER}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ iofd\+\_\+msghdr} $\ast$ \textbf{ iofd\+\_\+msghdr\+\_\+alloc} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, enum \textbf{ iofd\+\_\+msg\+\_\+action} action, struct \textbf{ msgb} $\ast$\textbf{ msg}, size\+\_\+t cmsg\+\_\+size)
\begin{DoxyCompactList}\small\item\em Allocate the msghdr. \end{DoxyCompactList}\item 
void \textbf{ iofd\+\_\+msghdr\+\_\+free} (struct \textbf{ iofd\+\_\+msghdr} $\ast$msghdr)
\begin{DoxyCompactList}\small\item\em Free the msghdr. \end{DoxyCompactList}\item 
struct \textbf{ msgb} $\ast$ \textbf{ iofd\+\_\+msgb\+\_\+alloc} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd)
\begin{DoxyCompactList}\small\item\em convenience wrapper to call msgb\+\_\+alloc with parameters from \doxyref{osmo\+\_\+io\+\_\+fd}{p.}{structosmo__io__fd} \end{DoxyCompactList}\item 
struct \textbf{ msgb} $\ast$ \textbf{ iofd\+\_\+msgb\+\_\+pending} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd)
\begin{DoxyCompactList}\small\item\em return the pending msgb in iofd or NULL if there is none \end{DoxyCompactList}\item 
struct \textbf{ msgb} $\ast$ \textbf{ iofd\+\_\+msgb\+\_\+pending\+\_\+or\+\_\+alloc} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd)
\begin{DoxyCompactList}\small\item\em Return the pending msgb or allocate and return a new one. \end{DoxyCompactList}\item 
void \textbf{ iofd\+\_\+handle\+\_\+recv} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, struct \textbf{ msgb} $\ast$\textbf{ msg}, int rc, struct \textbf{ iofd\+\_\+msghdr} $\ast$msghdr)
\begin{DoxyCompactList}\small\item\em completion handler\+: Internal function called by osmo\+\_\+io\+\_\+backend after a given I/O operation has completed \end{DoxyCompactList}\item 
void \textbf{ iofd\+\_\+handle\+\_\+send\+\_\+completion} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, int rc, struct \textbf{ iofd\+\_\+msghdr} $\ast$msghdr)
\begin{DoxyCompactList}\small\item\em completion handler\+: Internal function called by osmo\+\_\+io\+\_\+backend after a given I/O operation has completed \end{DoxyCompactList}\item 
void \textbf{ iofd\+\_\+handle\+\_\+segmented\+\_\+read} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, struct \textbf{ msgb} $\ast$\textbf{ msg}, int rc)
\begin{DoxyCompactList}\small\item\em Restore message boundaries on read() and pass individual messages to the read callback. \end{DoxyCompactList}\item 
int \textbf{ iofd\+\_\+txqueue\+\_\+enqueue} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, struct \textbf{ iofd\+\_\+msghdr} $\ast$msghdr)
\begin{DoxyCompactList}\small\item\em Enqueue a message to be sent. \end{DoxyCompactList}\item 
void \textbf{ iofd\+\_\+txqueue\+\_\+enqueue\+\_\+front} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd, struct \textbf{ iofd\+\_\+msghdr} $\ast$msghdr)
\begin{DoxyCompactList}\small\item\em Enqueue a message at the front. \end{DoxyCompactList}\item 
struct \textbf{ iofd\+\_\+msghdr} $\ast$ \textbf{ iofd\+\_\+txqueue\+\_\+dequeue} (struct \textbf{ osmo\+\_\+io\+\_\+fd} $\ast$iofd)
\begin{DoxyCompactList}\small\item\em Dequeue a message from the front. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct \textbf{ iofd\+\_\+backend\+\_\+ops} \textbf{ iofd\+\_\+poll\+\_\+ops}
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{osmo__io__internal_8h_a4b3d0e4803b738d9436aa411f2770034}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_CLOSED@{IOFD\_FLAG\_CLOSED}}
\index{IOFD\_FLAG\_CLOSED@{IOFD\_FLAG\_CLOSED}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_CLOSED}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+CLOSED~(1$<$$<$0)}

\mbox{\label{osmo__io__internal_8h_a8cfe0aeea01b2a3a63c9a3d945b8a4ce}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_FD\_REGISTERED@{IOFD\_FLAG\_FD\_REGISTERED}}
\index{IOFD\_FLAG\_FD\_REGISTERED@{IOFD\_FLAG\_FD\_REGISTERED}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_FD\_REGISTERED}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+FD\+\_\+\+REGISTERED~(1$<$$<$4)}

\mbox{\label{osmo__io__internal_8h_a2694a1c04110dd6403e04deee17e3aa9}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_IN\_CALLBACK@{IOFD\_FLAG\_IN\_CALLBACK}}
\index{IOFD\_FLAG\_IN\_CALLBACK@{IOFD\_FLAG\_IN\_CALLBACK}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_IN\_CALLBACK}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+IN\+\_\+\+CALLBACK~(1$<$$<$1)}

\mbox{\label{osmo__io__internal_8h_aa535ebf3c880632ccb6898ef2757f624}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_ISSET@{IOFD\_FLAG\_ISSET}}
\index{IOFD\_FLAG\_ISSET@{IOFD\_FLAG\_ISSET}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_ISSET}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+ISSET(\begin{DoxyParamCaption}\item[{}]{iofd,  }\item[{}]{flag }\end{DoxyParamCaption})~((iofd)-\/$>$\textbf{ flags} \& (flag))}

\mbox{\label{osmo__io__internal_8h_a7429e58bebe1e31312e9c6b82f0eebae}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_NOTIFY\_CONNECTED@{IOFD\_FLAG\_NOTIFY\_CONNECTED}}
\index{IOFD\_FLAG\_NOTIFY\_CONNECTED@{IOFD\_FLAG\_NOTIFY\_CONNECTED}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_NOTIFY\_CONNECTED}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+NOTIFY\+\_\+\+CONNECTED~(1$<$$<$3)}

\mbox{\label{osmo__io__internal_8h_a7d9f3cd904a9745fc793d4b76fe9ee76}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_SET@{IOFD\_FLAG\_SET}}
\index{IOFD\_FLAG\_SET@{IOFD\_FLAG\_SET}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_SET}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+SET(\begin{DoxyParamCaption}\item[{}]{iofd,  }\item[{}]{flag }\end{DoxyParamCaption})~ (iofd)-\/$>$\textbf{ flags} $\vert$= (flag)}

\mbox{\label{osmo__io__internal_8h_a4cca1f2d9116f1680bb2ff6af835b72f}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_TO\_FREE@{IOFD\_FLAG\_TO\_FREE}}
\index{IOFD\_FLAG\_TO\_FREE@{IOFD\_FLAG\_TO\_FREE}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_TO\_FREE}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+TO\+\_\+\+FREE~(1$<$$<$2)}

\mbox{\label{osmo__io__internal_8h_aced0b602e5b35e9726f1e7433010fb51}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_FLAG\_UNSET@{IOFD\_FLAG\_UNSET}}
\index{IOFD\_FLAG\_UNSET@{IOFD\_FLAG\_UNSET}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{IOFD\_FLAG\_UNSET}
{\footnotesize\ttfamily \#define IOFD\+\_\+\+FLAG\+\_\+\+UNSET(\begin{DoxyParamCaption}\item[{}]{iofd,  }\item[{}]{flag }\end{DoxyParamCaption})~ (iofd)-\/$>$\textbf{ flags} \&= $\sim$(flag)}

\mbox{\label{osmo__io__internal_8h_ac2e3672dd4658f77813dc76b18074736}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!OSMO\_IO\_BACKEND\_DEFAULT@{OSMO\_IO\_BACKEND\_DEFAULT}}
\index{OSMO\_IO\_BACKEND\_DEFAULT@{OSMO\_IO\_BACKEND\_DEFAULT}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{OSMO\_IO\_BACKEND\_DEFAULT}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+IO\+\_\+\+BACKEND\+\_\+\+DEFAULT~\char`\"{}POLL\char`\"{}}

\mbox{\label{osmo__io__internal_8h_a034a8c174287b51b8ec834564cb1ce11}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!OSMO\_IO\_DEFAULT\_MSGB\_HEADROOM@{OSMO\_IO\_DEFAULT\_MSGB\_HEADROOM}}
\index{OSMO\_IO\_DEFAULT\_MSGB\_HEADROOM@{OSMO\_IO\_DEFAULT\_MSGB\_HEADROOM}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{OSMO\_IO\_DEFAULT\_MSGB\_HEADROOM}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+IO\+\_\+\+DEFAULT\+\_\+\+MSGB\+\_\+\+HEADROOM~128}

\mbox{\label{osmo__io__internal_8h_ac26ea151546a5c5b1fb49b85b2739bb4}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!OSMO\_IO\_DEFAULT\_MSGB\_SIZE@{OSMO\_IO\_DEFAULT\_MSGB\_SIZE}}
\index{OSMO\_IO\_DEFAULT\_MSGB\_SIZE@{OSMO\_IO\_DEFAULT\_MSGB\_SIZE}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{OSMO\_IO\_DEFAULT\_MSGB\_SIZE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+IO\+\_\+\+DEFAULT\+\_\+\+MSGB\+\_\+\+SIZE~1024}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbe}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!iofd\_msg\_action@{iofd\_msg\_action}}
\index{iofd\_msg\_action@{iofd\_msg\_action}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{iofd\_msg\_action}
{\footnotesize\ttfamily enum \textbf{ iofd\+\_\+msg\+\_\+action}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_READ@{IOFD\_ACT\_READ}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_READ@{IOFD\_ACT\_READ}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbead1ceb77e84c0d21744ab55953b204f98}} 
IOFD\+\_\+\+ACT\+\_\+\+READ&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_WRITE@{IOFD\_ACT\_WRITE}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_WRITE@{IOFD\_ACT\_WRITE}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbeadb009f4447c814a2680282636d344d65}} 
IOFD\+\_\+\+ACT\+\_\+\+WRITE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_RECVFROM@{IOFD\_ACT\_RECVFROM}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_RECVFROM@{IOFD\_ACT\_RECVFROM}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbea0c77cd90604914901e7ac0515dd0a891}} 
IOFD\+\_\+\+ACT\+\_\+\+RECVFROM&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_SENDTO@{IOFD\_ACT\_SENDTO}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_SENDTO@{IOFD\_ACT\_SENDTO}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbea7904e55eff068726ba2646fe8e71050b}} 
IOFD\+\_\+\+ACT\+\_\+\+SENDTO&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_RECVMSG@{IOFD\_ACT\_RECVMSG}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_RECVMSG@{IOFD\_ACT\_RECVMSG}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbea572636da621c7f90df79f437b752e941}} 
IOFD\+\_\+\+ACT\+\_\+\+RECVMSG&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_ACT\_SENDMSG@{IOFD\_ACT\_SENDMSG}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_ACT\_SENDMSG@{IOFD\_ACT\_SENDMSG}}}\mbox{\label{osmo__io__internal_8h_a3466ad83a1cbf0d9052ad8dffcb73dbeaf07c646d626bb16658b346ea6422c4ae}} 
IOFD\+\_\+\+ACT\+\_\+\+SENDMSG&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{osmo__io__internal_8h_a7f4ae8cde9085becb32b1bd28e0e8a9f}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!iofd\_seg\_act@{iofd\_seg\_act}}
\index{iofd\_seg\_act@{iofd\_seg\_act}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{iofd\_seg\_act}
{\footnotesize\ttfamily enum \textbf{ iofd\+\_\+seg\+\_\+act}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_SEG\_ACT\_HANDLE\_ONE@{IOFD\_SEG\_ACT\_HANDLE\_ONE}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_SEG\_ACT\_HANDLE\_ONE@{IOFD\_SEG\_ACT\_HANDLE\_ONE}}}\mbox{\label{osmo__io__internal_8h_a7f4ae8cde9085becb32b1bd28e0e8a9facc29f41e52c26c614f3ce40cdaa88945}} 
IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+HANDLE\+\_\+\+ONE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_SEG\_ACT\_HANDLE\_MORE@{IOFD\_SEG\_ACT\_HANDLE\_MORE}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_SEG\_ACT\_HANDLE\_MORE@{IOFD\_SEG\_ACT\_HANDLE\_MORE}}}\mbox{\label{osmo__io__internal_8h_a7f4ae8cde9085becb32b1bd28e0e8a9fa68c46a5c04ca6aaabcaa524e3ef69857}} 
IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+HANDLE\+\_\+\+MORE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{IOFD\_SEG\_ACT\_DEFER@{IOFD\_SEG\_ACT\_DEFER}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!IOFD\_SEG\_ACT\_DEFER@{IOFD\_SEG\_ACT\_DEFER}}}\mbox{\label{osmo__io__internal_8h_a7f4ae8cde9085becb32b1bd28e0e8a9fa4e5195957cdbf94c472a883cfe1a6689}} 
IOFD\+\_\+\+SEG\+\_\+\+ACT\+\_\+\+DEFER&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Variable Documentation}
\mbox{\label{osmo__io__internal_8h_a9a3acf8b445e5edaa11e143fdecd3ad3}} 
\index{osmo\_io\_internal.h@{osmo\_io\_internal.h}!iofd\_poll\_ops@{iofd\_poll\_ops}}
\index{iofd\_poll\_ops@{iofd\_poll\_ops}!osmo\_io\_internal.h@{osmo\_io\_internal.h}}
\doxysubsubsection{iofd\_poll\_ops}
{\footnotesize\ttfamily const struct \textbf{ iofd\+\_\+backend\+\_\+ops} iofd\+\_\+poll\+\_\+ops\hspace{0.3cm}{\ttfamily [extern]}}



Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}, and \textbf{ iofd\+\_\+poll\+\_\+ofd\+\_\+cb\+\_\+recvmsg\+\_\+sendmsg()}.

