You're right- this is getting interesting ;)

http://www.packetfactory.net/libnet/manual/4.html#s4.1.5

Unless I'm mistaken, you don't need to actually hijack the socket- you merely 
need to write to the network. Check out section 3.1 of RFC 793. There is 
source and destination port- that is how they are routed. Okay anyone PLEASE 
correct me if i'm wrong...

My understanding is a socket is an interface to the kernel. So basically, you 
talk to a socket, which the kernel associates with source and destination 
ports, and destination IP address. Thats why you can just write to a socket 
instead of explicitly stating all the information. The kernel then sends out 
then creates the packet and send it to the destination IP.

libnet would allow you to bypass the socket phase, and manually create a 
socket. Think of a socket as a GUI for the network, and libnet is like a 
console ;)

Hope that helps, and once again anyone PLEASE correct any inaccuracies, since 
I want to know.




On Tuesday 21 May 2002 23:53 pm, Vinod Panicker wrote:
> Thanks for the reply Miguel, but here i'm not trying to implement
> my own multi-threaded server - exactly the reason why i'm using
> Apache / PHP.
>
> I could have made a listening server which is based on a
> multi-threaded or multi-forked model, but the time and
> complexities involved would be huge.  Thats why I chose Apache /
> PHP.
>
> Now if what i'm asking for can be done, developers can easily
> leverage existing efficient server technologies (Apache) to build
> their own App servers.
>
> I know that there is no existing function in PHP that would allow
> it to retrieve the socket from Apache ;), all i'm asking for is a
> hack that would allow me to do it.
>
> I thought that i'd just as well post it on the mailing list before
> diving into the source code and trying to figure out for myself.
> No point trying to re-invent the wheel, right?
>
> Evan, that lib will allow me to create my own packets, but which
> socket do i send it to?  Thats been the question all along.
>
> I think this is getting really interesting :)
>
> Tx,
> Vinod.
>
> On Wed, 22 May 2002 Miguel Cruz wrote :
> >I don't think you're going to get Apache to hand you the
> >socket.
> >
> >However, you can write a program using the standalone (CGI) PHP
> >interpreter that will act like a server - check out
> >http://php.net/socket_create_listen for more info.
> >
> >You could redirect from your standard web server to your
> >listening PHP app
> >running on another port. You'll then have to implement at least a
> >subset
> >of the HTTP protocol in order to get browsers to talk to you.
> >
> >Unfortunately, since you can't - to the best of my knowledge -
> >fork a PHP
> >program, you're going to have to do your own homebrew threading
> >which will
> >make life slightly complicated.
> >
> >miguel
> >
> >On 22 May 2002, Vinod  Panicker wrote:
> > > It still seems like I havent made the problem clear enough.
> > >
> > > I am aware of the print(), echo() and flush() functions and
> >
> >what
> >
> > > they do.  It does not fit in as a solution.  Let me explain
> >
> >my
> >
> > > problem more elaborately -
> > > The client calls a PHP script, script_a.php on the Apache
> >
> >web
> >
> > > server, using a Keep-Alive connection.  The script returns
> >
> >some
> >
> > > response to the client which it uses.  Now since the
> >
> >connection is
> >
> > > a Keep-alive, apache still has it open for reading and
> >
> >writing.
> >
> > > When the client wants to call other scripts, it just sends
> >
> >the
> >
> > > request over the same connection.  Now the thing is that if
> >
> >the
> >
> > > server needs to send some ASYNCHRONOUS data to the client,
> >
> >without
> >
> > > the client requesting for anything, a normal PHP script wont
> >
> >be
> >
> > > able to do it, since the script would get executed by the
> >
> >web
> >
> > > server ONLY on a client request (coz thats the way HTTP
> >
> >works).
> >
> > > Now what i was thinking was - if i could get hold of the
> >
> >socket
> >
> > > that is being used by apache to send data to the client, I
> >
> >could
> >
> > > effectively write() to it, from a C++ app or a PHP script
> >
> >(which
> >
> > > gets invoked from lets say another server).  print(), echo()
> >
> >etc
> >
> > > are functions that write to the output stream, which is opened
> >
> >as
> >
> > > a result of the clients request, by the web server.
> > >
> > > I want the ability to write to a socket thats been created
> >
> >earlier
> >
> > > - i want to steal it from Apache, so that i can use it when
> >
> >and
> >
> > > where i like.
> > >
> > > Functions like echo() and print() are not going to work here,
> >
> >i
> >
> > > will have to use write() so that i can specify the socket to
> >
> >which
> >
> > > the data has to be written!
> > >
> > > Hope the problem is understood now.
> > >
> > > Now for your question -
> > > When the client wants to send data to the server, it just has
> >
> >to
> >
> > > open a socket connection with the web server, and issue a GET
> >
> >or a
> >
> > > POST request!  if the connection is a keep-alive connection,
> >
> >and
> >
> > > it has already been created, the client just has to do a GET
> >
> >or a
> >
> > > POST without the need to connect().
> > >
> > > This mechanism, where the client frequently connects() to
> >
> >the
> >
> > > server and checks for messages is called polling.  One way
> >
> >of
> >
> > > reducing the high overhead of this is to reuse the connection
> >
> >by
> >
> > > using a keep-alive connection.  A still better improvement
> >
> >would
> >
> > > be to remove the need for a poll altogether, by doing
> >
> >something
> >
> > > (thats what my question is all about) on the server so that it
> >
> >can
> >
> > > send data asynchronously to the server.
> > >
> > >
> > > Tx,
> > > Vinod.
> > >
> > > On Wed, 22 May 2002 Bogdan Stancescu wrote :
> > > >For your specific problem, I think Mr. Lemos has provided a
> > > >viable solution (using print() or echo() and flush() whenever
> >
> >you
> >
> > > >need to, instead of grabbing the socket and write() to it).
> >
> >My
> >
> > > >problem however is how you envision solving the communication
> >
> >the
> >
> > > >other way around (i.e. when the CLIENT wants to send data to
> >
> >the
> >
> > > >server).
> > > >
> > > >Bogdan
> > > >
> > > >Vinod Panicker wrote:
> > > >>Hi,
> > > >>
> > > >>Tx for your very prompt reply.
> > > >>
> > > >>Yeah, I'll post the solution as soon as I find it
> >
> >someplace.
> >
> > > >>Let me outline the problem in more detail -
> > > >>
> > > >>Client (VC++) calls a PHP script on the server, specifies
> >
> >the
> >
> > > >>connection type as Keep-Alive.  The PHP script, somehow
> >
> >(still a
> >
> > > >>big question) gets the socket on which the apache server
> >
> >has
> >
> > > >>received the client request (so that it can send data to
> >
> >the
> >
> > > >>client later) and stores it in a database.
> > > >>
> > > >>Now whenever another PHP script wants to send data
> > > >>asynchronously to the client, it gets the socket from the
> > > >>database, and just calls a write() on it.  Since the
> >
> >connection
> >
> > > >>is still open (Keep-Alive), the client receives the
> >
> >information,
> >
> > > >>and doesnt have to poll the server periodically.
> > > >>
> > > >>The application of this is indeed destined for a messaging
> > > >>product, and could benefit a lot of other areas as well.
> > > >>
> > > >>The only thing that is needed is the socket from apache.
> > > >>
> > > >>Someone somewhere knows how to get this done, i'm sure :)
> > > >>
> > > >>Possibly a hack into the PHP module can get this done, i'm
> >
> >open
> >
> > > >>to suggestions.
> > > >>
> > > >>Tx,
> > > >>Vinod.
> > > >>
> > > >>On Tue, 21 May 2002 Bogdan Stancescu wrote :
> > > >>>Hi!
> > > >>>
> > > >>>I'm looking for an answer to your questions as well, so if
> >
> >you
> >
> > > >>>do find a solution on other lists, could you please post
> >
> >it
> >
> > > >>>here as well?
> > > >>>
> > > >>>Regarding the issue, your proposal wouldn't make for
> > > >>>full-duplex as far as I understand since I don't see how
> >
> >the
> >
> > > >>>client would be able to send any data on the same
> >
> >connection
> >
> > > >>>_after_ getting connected.
> > > >>>
> > > >>>What are you using on the other end of the pipe (on the
> > > >>>client)? Plain HTML? Flash? Java? Something else?
> > > >>>
> > > >>>Bogdan
> > > >>>
> > > >>>Vinod Panicker wrote:
> > > >>>>Hi,
> > > >>>>
> > > >>>>We have developed a client-server application where the
> >
> >server
> >
> > > >>>>needs to send asynchronous data to the client.  Now since
> >
> >we
> >
> > > >>>>are using Apache/PHP/MySQL, the client needs to poll the
> > > >>>>server periodically for information.
> > > >>>>
> > > >>>>I was thinking if there was some way to get around this
> >
> >basic
> >
> > > >>>>problem.  I understand that this is how things are
> >
> >supposed to
> >
> > > >>>>work, but it would be just great if i could PUSH data from
> >
> >the
> >
> > > >>>>server to the client, using HTTP.
> > > >>>>
> > > >>>>Since HTTP is a request/response based protocol, Apache
> >
> >would
> >
> > > >>>>not send any data to the client asynchronously.  So what i
> >
> >was
> >
> > > >>>>thinking was - If i tell the server to allow Keep-Alive
> > > >>>>connections, and increase the timeout value and max
> >
> >requests,
> >
> > > >>>>I would effectively have a constant TCP connection.  Now
> >
> >the
> >
> > > >>>>only problem would be of sending asynchronous data to
> >
> >the
> >
> > > >>>>client.  Solution?  Here goes - If there was some way in
> >
> >which
> >
> > > >>>>i could get hold of the file descriptor(socket) that is
> >
> >being
> >
> > > >>>>used by apache to write data to the client, then i could,
> >
> > from
> >
> > > >>>>a PHP script also send any data to the client using the
> >
> >socket
> >
> > > >>>>functions of PHP since i already have the socket with
> >
> >me.
> >
> > > >>>>This would mean that the client doesnt have to poll the
> >
> >server
> >
> > > >>>>for data any more... and if the connection does get
> >
> >closed,
> >
> > > >>>>the client could reconnect to the server asking for
> >
> >another
> >
> > > >>>>keep-alive connection.
> > > >>>>
> > > >>>>Now I know that this is probably the wrong place to put
> >
> >such a
> >
> > > >>>>query - maybe the apache list would have been better.
> >
> >But
> >
> > > >>>>since I'm using PHP out here, i thought i'd give it a
> >
> >try.
> >
> > > >>>>Does the solution sound very outlandish?  Are there any
> > > >>>>pitfalls?  And finally, how do i get hold of the socket?
> > > >
> > > >-- PHP General Mailing List (http://www.php.net/)
> > > >To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > > _________________________________________________________
> > > Click below to visit monsterindia.com and review jobs in India
> >
> >or
> >
> > > Abroad
> > > http://monsterindia.rediff.com/jobs
> >
> >--
> >PHP General Mailing List (http://www.php.net/)
> >To unsubscribe, visit: http://www.php.net/unsub.php
>
> _________________________________________________________
> Click below to visit monsterindia.com and review jobs in India or
> Abroad
> http://monsterindia.rediff.com/jobs


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to