kern_sosend-Kernel-Service

Zweck

Übergeben Sie Daten und Steuerinformationen an die dem Protokoll zugeordneten Senderoutinen.

Syntax

#include <sys/kern_socket.h>
int  kern_sosend( ksocket_t  so, struct sockaddr *faddr, 
struct mbuf *top, 
struct mbuf *control, 
int flags )

Parameter

Element Beschreibung
so Der Socket zum Senden von Daten.
FADR Die Zieladresse, nur erforderlich, wenn keine Verbindung zum Socket besteht.
top Die MBUF -Kette der zu sendenden Daten. Beachten Sie, dass bei der ersten MBUF der Paketheader ausgefüllt sein muss. Setzen Sie top->m_pkthdr.len auf die Gesamtlänge der Daten in der mbuf -Kette und m_flags auf M_PKTHDR. Der Aufrufende muss MBUF -Speicher zuordnen, bevor die Routine aufgerufen wird.
control Zeiger auf einen MBUF mit den zu sendenden Steuerinformationen. Der Aufrufende muss MBUF -Speicher zuordnen, bevor er die Funktion aufruft, wenn er Steuerinformationen übergeben möchte.
Flags Markierungsoptionen für diesen Schreibaufruf. Der Aufrufende kann Flags auf NACHRICHTEN_NICHT_BLOCKsetzen.

Beschreibung

Der kern_sosenden -Kernel-Service übergibt Daten und Steuerinformationen an das Protokoll, das den Senderoutinen zugeordnet ist.

Ausführungsumgebung

Der kern_sosenden -Kernel-Service kann von der Prozessumgebung aufgerufen werden.

Beispiele

ksocket_t  so;
int flags = 0;
struct sockaddr_in faddr;
struct mbuf *send_mbuf;
struct sockaddr_in  faddr;
char		 msg[100];
int		   i, rc;
rc = kern_socreate(AF_INET, &so, SOCK_STREAM, IPPROTO_TCP);
if (rc != 0 )  		 
{ 		 		 
		  return(-1); 		 
}		   		 
bzero(&faddr, sizeof(struct sockaddr_in)); 		 
faddr.sin_family = AF_INET; 		 
faddr.sin_port = 23456; 		 
faddr.sin_len = sizeof(struct sockaddr_in); 		 
faddr.sin_addr.s_addr = inet_addr("9.3.108.210"); 		 
rc = kern_soconnect(so, (struct sockaddr *) &faddr); 		 
if (rc != 0 )  		 
{ 		 		 
      return(-1); 		 
}  		 
send_mbuf = MGETBUF(sizeof(msg), M_DONOTWAIT); /* Caller needs to allocate mbuf memory */ 		 
if (send_mbuf == NULL)
{         		 
     return (-1);     		 
}		 		   		 
for (i=0; i < 100, i++) 		 
{ 		 		 
         msg[i] = 0x2A; 		 
}		 		  		 
bcopy(msg, mtod(send_mbuf, caddr_t), sizeof(msg)); 		 
send_mbuf->m_len = send_mbuf->m_pkthdr.len = sizeof(msg);		   		 
rc = kern_sosend(so, NULL, send_mbuf, 0, MSG_NONBLOCK)); 		 
if (rc != 0 )  		 
{ 		 		 
     return(-1); 		 
}  

Rückgabewerte

Element Beschreibung
0 Bei Erfolg
>0 Fehler

Der Rückgabewert ungleich null ist die Fehlernummer, die in der Datei /usr/include/sys/errno.h definiert ist.