mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-02 15:45:25 +00:00
try to get the address put into the returned structure, but no go yet
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <isc/assertions.h>
|
#include <isc/assertions.h>
|
||||||
#include <isc/memcluster.h>
|
#include <isc/memcluster.h>
|
||||||
@@ -12,6 +13,10 @@
|
|||||||
#include <isc/result.h>
|
#include <isc/result.h>
|
||||||
#include <isc/socket.h>
|
#include <isc/socket.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
isc_memctx_t mctx = NULL;
|
isc_memctx_t mctx = NULL;
|
||||||
|
|
||||||
volatile int tasks_done = 0;
|
volatile int tasks_done = 0;
|
||||||
@@ -75,6 +80,8 @@ my_recv(isc_task_t task, isc_event_t event)
|
|||||||
(char *)(event->arg), sock,
|
(char *)(event->arg), sock,
|
||||||
dev->region.base, dev->region.length,
|
dev->region.base, dev->region.length,
|
||||||
dev->n, dev->result);
|
dev->n, dev->result);
|
||||||
|
printf("\tFrom: %s port %d\n", inet_ntoa(dev->address.type.sin.sin_addr),
|
||||||
|
ntohs(dev->address.type.sin.sin_port));
|
||||||
|
|
||||||
if (dev->result != ISC_R_SUCCESS) {
|
if (dev->result != ISC_R_SUCCESS) {
|
||||||
isc_socket_detach(&sock);
|
isc_socket_detach(&sock);
|
||||||
@@ -152,7 +159,7 @@ main(int argc, char *argv[])
|
|||||||
isc_socketmgr_t socketmgr;
|
isc_socketmgr_t socketmgr;
|
||||||
isc_socket_t so1, so2;
|
isc_socket_t so1, so2;
|
||||||
struct isc_sockaddr sockaddr;
|
struct isc_sockaddr sockaddr;
|
||||||
int addrlen;
|
unsigned int addrlen;
|
||||||
|
|
||||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||||
sockaddr.type.sin.sin_port = htons(5544);
|
sockaddr.type.sin.sin_port = htons(5544);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: socket.h,v 1.5 1998/11/11 00:43:14 explorer Exp $ */
|
/* $Id: socket.h,v 1.6 1998/11/15 11:48:21 explorer Exp $ */
|
||||||
|
|
||||||
#ifndef ISC_SOCKET_H
|
#ifndef ISC_SOCKET_H
|
||||||
#define ISC_SOCKET_H 1
|
#define ISC_SOCKET_H 1
|
||||||
@@ -79,13 +79,15 @@ typedef struct isc_socketevent {
|
|||||||
unsigned int n; /* bytes read or written */
|
unsigned int n; /* bytes read or written */
|
||||||
struct isc_region region; /* the region info */
|
struct isc_region region; /* the region info */
|
||||||
struct isc_sockaddr address; /* source address */
|
struct isc_sockaddr address; /* source address */
|
||||||
int addrlength; /* length of address */
|
unsigned int addrlength; /* length of address */
|
||||||
} *isc_socketevent_t;
|
} *isc_socketevent_t;
|
||||||
|
|
||||||
typedef struct isc_socket_newconev {
|
typedef struct isc_socket_newconev {
|
||||||
struct isc_event common;
|
struct isc_event common;
|
||||||
isc_socket_t newsocket;
|
isc_socket_t newsocket;
|
||||||
isc_result_t result; /* OK, EOF, whatever else */
|
isc_result_t result; /* OK, EOF, whatever else */
|
||||||
|
struct isc_sockaddr address; /* source address */
|
||||||
|
unsigned int addrlength; /* length of address */
|
||||||
} *isc_socket_newconnev_t;
|
} *isc_socket_newconnev_t;
|
||||||
|
|
||||||
#define ISC_SOCKEVENT_ANYEVENT (0)
|
#define ISC_SOCKEVENT_ANYEVENT (0)
|
||||||
@@ -413,7 +415,7 @@ isc_socket_send(isc_socket_t socket, isc_region_t region,
|
|||||||
isc_result_t
|
isc_result_t
|
||||||
isc_socket_sendto(isc_socket_t socket, isc_region_t region,
|
isc_socket_sendto(isc_socket_t socket, isc_region_t region,
|
||||||
isc_task_t task, isc_taskaction_t action, void *arg,
|
isc_task_t task, isc_taskaction_t action, void *arg,
|
||||||
isc_sockaddr_t address, int addrlength);
|
isc_sockaddr_t address, unsigned int addrlength);
|
||||||
/*
|
/*
|
||||||
* Send the contents of 'region' to the socket's peer.
|
* Send the contents of 'region' to the socket's peer.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: socket.c,v 1.8 1998/11/11 02:05:36 explorer Exp $ */
|
/* $Id: socket.c,v 1.9 1998/11/15 11:48:17 explorer Exp $ */
|
||||||
|
|
||||||
#include "attribute.h"
|
#include "attribute.h"
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ struct isc_socket {
|
|||||||
isc_socket_intev_t riev;
|
isc_socket_intev_t riev;
|
||||||
isc_socket_intev_t wiev;
|
isc_socket_intev_t wiev;
|
||||||
struct isc_sockaddr address;
|
struct isc_sockaddr address;
|
||||||
int addrlength;
|
unsigned int addrlength;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SOCKET_MANAGER_MAGIC 0x494f6d67U /* IOmg */
|
#define SOCKET_MANAGER_MAGIC 0x494f6d67U /* IOmg */
|
||||||
@@ -610,7 +610,7 @@ internal_accept(isc_task_t task, isc_event_t ev)
|
|||||||
isc_socket_newconnev_t dev;
|
isc_socket_newconnev_t dev;
|
||||||
isc_socket_ncintev_t iev;
|
isc_socket_ncintev_t iev;
|
||||||
struct sockaddr addr;
|
struct sockaddr addr;
|
||||||
int addrlen;
|
u_int addrlen;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
sock = ev->sender;
|
sock = ev->sender;
|
||||||
@@ -645,6 +645,7 @@ internal_accept(isc_task_t task, isc_event_t ev)
|
|||||||
* EWOULDBLOCK, simply poke the watcher to watch this socket
|
* EWOULDBLOCK, simply poke the watcher to watch this socket
|
||||||
* again.
|
* again.
|
||||||
*/
|
*/
|
||||||
|
addrlen = sizeof(addr);
|
||||||
fd = accept(sock->fd, &addr, &addrlen);
|
fd = accept(sock->fd, &addr, &addrlen);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
if (errno == EWOULDBLOCK) {
|
if (errno == EWOULDBLOCK) {
|
||||||
@@ -682,6 +683,11 @@ internal_accept(isc_task_t task, isc_event_t ev)
|
|||||||
XTRACE(("internal_accept: newsock %p, fd %d\n",
|
XTRACE(("internal_accept: newsock %p, fd %d\n",
|
||||||
dev->newsocket, fd));
|
dev->newsocket, fd));
|
||||||
|
|
||||||
|
sock->addrlength = addrlen;
|
||||||
|
memcpy(&sock->address, &addr, addrlen);
|
||||||
|
dev->addrlength = addrlen;
|
||||||
|
memcpy(&dev->address, &addr, addrlen);
|
||||||
|
|
||||||
UNLOCK(&sock->lock);
|
UNLOCK(&sock->lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -708,6 +714,8 @@ internal_read(isc_task_t task, isc_event_t ev)
|
|||||||
isc_socket_t sock;
|
isc_socket_t sock;
|
||||||
int cc;
|
int cc;
|
||||||
size_t read_count;
|
size_t read_count;
|
||||||
|
struct sockaddr addr;
|
||||||
|
u_int addrlen;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find out what socket this is and lock it.
|
* Find out what socket this is and lock it.
|
||||||
@@ -761,7 +769,21 @@ internal_read(isc_task_t task, isc_event_t ev)
|
|||||||
* we can.
|
* we can.
|
||||||
*/
|
*/
|
||||||
read_count = dev->region.length - dev->n;
|
read_count = dev->region.length - dev->n;
|
||||||
cc = recv(sock->fd, dev->region.base + dev->n, read_count, 0);
|
if (sock->type == isc_socket_tcp) {
|
||||||
|
cc = recv(sock->fd, dev->region.base + dev->n,
|
||||||
|
read_count, 0);
|
||||||
|
memcpy(&dev->address, &sock->address,
|
||||||
|
sock->addrlength);
|
||||||
|
dev->addrlength = sock->addrlength;
|
||||||
|
} else {
|
||||||
|
addrlen = sizeof(addr);
|
||||||
|
cc = recvfrom(sock->fd, dev->region.base + dev->n,
|
||||||
|
read_count, 0,
|
||||||
|
(struct sockaddr *)&addr,
|
||||||
|
&addrlen);
|
||||||
|
memcpy(&dev->address, &addr, addrlen);
|
||||||
|
dev->addrlength = addrlen;
|
||||||
|
}
|
||||||
|
|
||||||
XTRACE(("internal_read: read(%d) %d\n", sock->fd, cc));
|
XTRACE(("internal_read: read(%d) %d\n", sock->fd, cc));
|
||||||
|
|
||||||
@@ -1402,7 +1424,7 @@ isc_socket_send(isc_socket_t sock, isc_region_t region,
|
|||||||
isc_result_t
|
isc_result_t
|
||||||
isc_socket_sendto(isc_socket_t sock, isc_region_t region,
|
isc_socket_sendto(isc_socket_t sock, isc_region_t region,
|
||||||
isc_task_t task, isc_taskaction_t action, void *arg,
|
isc_task_t task, isc_taskaction_t action, void *arg,
|
||||||
isc_sockaddr_t address, int addrlength)
|
isc_sockaddr_t address, unsigned int addrlength)
|
||||||
{
|
{
|
||||||
isc_socketevent_t ev;
|
isc_socketevent_t ev;
|
||||||
isc_socket_intev_t iev;
|
isc_socket_intev_t iev;
|
||||||
|
Reference in New Issue
Block a user