There are a couple of instances you'd want immediate updates sent to the client, so splitting the relevant portion out into a function is helpful. Otherwise you'd be calling the whole msdp_update() unnecessarily.
For AFFECTS it probably isn't as important. But take, for example, map data like ROOM_VNUM.
Code:
Example:
You move north and immediately you are in VNUM 100, "Main Street".
After one second msdp_update() fires and sends the new data to your Mud Client.
Your mapper updates and is happy.
Next you quickly move north, north, north.
You are in VNUM 103, "Third Street" (boring Mud, I know)
Because msdp_update() is firing every second, your Mud Client doesn't know about 101 or 102 because you went through them so fast.
In this case you'd want to call the function to refresh the msdp data for exits whenever the char_to_room() function is called.