aboutsummaryrefslogtreecommitdiff
path: root/src/Sockets.c
diff options
context:
space:
mode:
authorjshalf <jshalf@bfcf8e34-485d-4d46-a995-1fd6fa6fb178>2000-10-09 07:37:58 +0000
committerjshalf <jshalf@bfcf8e34-485d-4d46-a995-1fd6fa6fb178>2000-10-09 07:37:58 +0000
commit52dbed6e928d2882b0c0f7005a0e269755dea5a2 (patch)
tree34dd14f5afff2e6c0ecfbb3c002a6b0fb9354080 /src/Sockets.c
parent749d477a67a3d9b8a314d62030c646606f1a001f (diff)
Finally got it to send some data to IsoView.
FYI: htonl() doesn't always do what is expected of it... Used wavetoy binary source to test. Critical params for the .par file were isosurfacer::output_format="SOCK" isosurfacer::output_var = "WAVETOY::phi" isosurfacer::isovalue=0.35: Now must fix the steering part. git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGHIO/IsoSurfacer/trunk@10 bfcf8e34-485d-4d46-a995-1fd6fa6fb178
Diffstat (limited to 'src/Sockets.c')
-rw-r--r--src/Sockets.c80
1 files changed, 60 insertions, 20 deletions
diff --git a/src/Sockets.c b/src/Sockets.c
index 2d36b02..fea3c92 100644
--- a/src/Sockets.c
+++ b/src/Sockets.c
@@ -118,6 +118,38 @@ static SOCKET maxsock;
static isoSocket *controlsocklist = NULL;
static isoSocket *datasocklist = NULL;
+static chosen_controlport = 0;
+static chosen_dataport = 0;
+
+
+
+/********************************************************************
+ ********************* Internal Routines **********************
+ ********************************************************************/
+static int byteswap(void *buf,CCTK_INT8 nelements,int elementsize)
+{
+ char *buffer;
+ CCTK_INT8 i;
+ int s,d;
+#ifdef WORDS_BIGENDIAN
+ return 0;
+#else
+ buffer=(char *)buf;
+ if(elementsize<=1) return 0;
+
+ for(i=0;i<nelements;i++,buffer+=elementsize){
+ // do the swap thing on each element
+ for(s=0,d=elementsize-1;s<d;s++,d--){
+ char c=buffer[s];
+ buffer[s]=buffer[d];
+ buffer[d]=c;
+ }
+ }
+ return 1;
+#endif
+}
+
+
/********************************************************************
********************* External Routines **********************
********************************************************************/
@@ -168,7 +200,8 @@ int Iso_SetupServer(int dataport, int controlport, int queue_size, int hunt)
printf("Isosurfacer listening for control connetcions on %s port %d/\n", hostname, hunt ? realcport : controlport);
printf("Isosurfacer listening for data connections on %s port %d/\n", hostname, hunt ? realdport : dataport);
-
+ chosen_controlport = hunt ? realcport:controlport;
+ chosen_dataport = hunt ? realdport:dataport;
minsock = datasock > controlsock ? controlsock : datasock;
maxsock = datasock > controlsock ? datasock : controlsock;
@@ -280,7 +313,8 @@ int Iso_Poll(cGH *cctkGH, long sec, long usec)
CCTK_Abort(cctkGH, EXIT_FAILURE);
}
fprintf (stderr,
- "Isosurfacer: data connect from host %s, port %hd.\n",
+ "Isosurfacer: data connect to port %u from host %s, port %hd.\n",
+ chosen_dataport,
inet_ntoa (clientname.sin_addr),
ntohs (clientname.sin_port));
@@ -301,7 +335,8 @@ int Iso_Poll(cGH *cctkGH, long sec, long usec)
CCTK_Abort(cctkGH, EXIT_FAILURE);
}
fprintf (stderr,
- "Isosurfacer: control connect from host %s, port %hd.\n",
+ "Isosurfacer: control connect to port %u from host %s, port %hd.\n",
+ chosen_controlport,
inet_ntoa (clientname.sin_addr),
ntohs (clientname.sin_port));
@@ -333,8 +368,8 @@ int IsoWriteDataToClients(const char *metadata,
CCTK_INT4 *data=(CCTK_INT4*)dataP;
int retval;
CCTK_INT4 i;
- CCTK_INT4 datatype;
- CCTK_INT4 datasize;
+ CCTK_INT4 datatype=type;
+ CCTK_INT8 datasize=size;
isoSocket *this;
isoSocket *next;
@@ -342,26 +377,30 @@ int IsoWriteDataToClients(const char *metadata,
CCTK_REAL4 tmpverts[3] = {0.0,0.0,0.0};
/* Convert the data to network byte order */
- for(i = 0; i < size; i++)
- {
- data[i] = htons(data[i]);
- }
-
- datatype = type;
-
- datatype = htons(datatype);
-
- datasize = htonl(datasize);
+ byteswap(data,size,4);
+ /* for(i = 0; i < size; i++)
+ {
+ I wish htons/htonl actually worked as you'd expect them to
+ data[i] = htons(data[i]);
+ }*/
+ /* printf("Pre-Swap Datasize=%lld:%llx\n",datasize,datasize); */
+ byteswap(&datatype,1,4);
+ byteswap(&datasize,1,8);
+ /* printf("PostSwap Datasize=%lld:%llx\n",datasize,datasize); */
+ /* unfortunately short is 16 bits and long is 32 bits on some systems
+ datatype = htons(datatype);
+ datasize = htonl(datasize); */
/* Send data down all connected sockets. */
for(this = datasocklist; this; this = next)
{
next = this->next;
- Iso_Write(this, (void *)&datasize, 8);
- Iso_Write(this, (void *)&datatype, 4);
+ retval=Iso_Write(this, (void*)(&datasize), 8);
+ /* printf("RetVal on size write=%d\n",retval); */
+ Iso_Write(this, (void*)(&datatype), 4);
Iso_Write(this, metadata, 64);
- retval = Iso_Write(this, (void *)data, size);
+ retval = Iso_Write(this, (void *)data, size*4);
if(retval < 0)
{
@@ -370,12 +409,13 @@ int IsoWriteDataToClients(const char *metadata,
}
/* Convert the data back */
+ byteswap(data,size,4);
+#if 0
for(i = 0; i < size; i++)
{
data[i] = htons(data[i]);
}
-
-
+#endif
}